1. 程式人生 > >Spring來一發(二)Bean的管理

Spring來一發(二)Bean的管理

1、Bean的初始化

Spring中Bean的初始化是在ApplicationContext應用上下文載入的時候實現的,Spring通過兩種方式可以發現需要初始化的Bean,一種方式是加@Bean註解,另一種是在xml種定義Bean。

在啟動web容器時,ContextLoaderListener建立ApplicationContext時會載入applicationContext.xml,在這個xml中會配置classpath*:spring/*.xml,這樣就可以載入所有的Spring相關xml中的Bean。

2、Bean的裝配方式

在Spring容器中拼湊Bean叫做裝配,裝配Bean的時候,容器需要知道有哪些Bean以及容器如何使用依賴注入將它們配合在一起。裝配方式有三種:

  • 在XML中進行顯式配置;

  • 在Java中進行顯式配置;

  • 隱式的bean發現機制和自動裝配(通過註解等方式);

Spring中可以利用註解@Autowired、@Resource實現自動裝配,通過配置元件掃描(component scanning)讓spring自動發現上下文中所建立的bean,掃描到@Component、@Service註解的bean。有些場景是無法應用自動裝配的,如第三方庫的元件,原因是這些元件不是本地的,無法被容器自動發現。

3、Bean的生命週期

Bean從建立到銷燬:

  • Bean的建立, 由BeanFactory讀取Bean定義檔案,並生成各個例項;

  • Setter注入,執行Bean的屬性依賴注入;

  • BeanNameAware的setBeanName(), 如果實現該介面,則執行其setBeanName方法;

  • BeanFactoryAware的setBeanFactory(),如果實現該介面,則執行其setBeanFactory方法;

  • BeanPostProcessor的processBeforeInitialization(),如果有關聯的processor,則在Bean初始化之前都會執行這個例項的processBeforeInitialization()方法;

  • InitializingBean的afterPropertiesSet(),如果實現了該介面,則執行其afterPropertiesSet()方法;

  • Bean定義檔案中定義init-method;

  • BeanPostProcessors的processAfterInitialization(),如果有關聯的processor,則在Bean初始化之前都會執行這個例項的processAfterInitialization()方法;

  • DisposableBean的destroy(),在容器關閉時,如果Bean類實現了該介面,則執行它的destroy()方法;

  • Bean定義檔案中定義destroy-method,在容器關閉時,可以在Bean定義檔案中使用“destory-method”定義的方法。