Spring的 Bean 註解和生命周期

  • 2019 年 10 月 7 日
  • 筆記

Spring 的 bean 註解聲明

使用 @Autowired 註解自動裝配 bean,要想把類標識成可用於 @Autowired 註解自動裝配的 bean 的類,採用以下注解可實現:

  • @Component :通用的註解,可標註任意類為 Spring 組件。如果一個 Bean 不知道屬於哪個層,可以使用 @Component 註解標註。
  • @Repository : 對應持久層即 Dao 層,主要用於數據庫相關操作。
  • @Service : 對應服務層,主要涉及一些複雜的邏輯,需要用到 Dao 層。
  • @Controller : 對應 Spring MVC 控制層,主要用戶接受用戶請求並調用 Service 層返回數據給前端頁面。

Spring 的 bean 生命周期

  • Bean 容器找到配置文件中 Spring Bean 的定義。
  • Bean 容器利用 Java Reflection API 創建一個 Bean 的實例。
  • 如果涉及到一些屬性值 利用 set() 方法設置一些屬性值。
  • 如果 Bean 實現了 BeanNameAware 接口,調用 setBeanName()方法,傳入 Bean 的名字。
  • 如果 Bean 實現了 BeanClassLoaderAware 接口,調用 setBeanClassLoader() 方法,傳入 ClassLoader 對象的實例。
  • 如果 Bean 實現了 BeanFactoryAware 接口,調用 setBeanClassLoader() 方法,傳入 ClassLoader 對象的實例。
  • 與上面的類似,如果實現了其他 *.Aware 接口,就調用相應的方法。
  • 如果有和加載這個 Bean 的 Spring 容器相關的 BeanPostProcessor 對象,執行 postProcessBeforeInitialization() 方法
  • 如果 Bean 實現了 InitializingBean 接口,執行 afterPropertiesSet() 方法。
  • 如果 Bean 在配置文件中的定義包含 init-method 屬性,執行指定的方法。
  • 如果有和加載這個 Bean 的 Spring 容器相關的 BeanPostProcessor 對象,執行postProcessAfterInitialization() 方法
  • 當要銷毀 Bean 的時候,如果 Bean 實現了 DisposableBean 接口,執行 destroy() 方法。
  • 當要銷毀 Bean 的時候,如果 Bean 在配置文件中的定義包含 destroy-method 屬性,執行指定的方法。

Spring Bean 生命周期

Spring Bean 生命周期