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 生命周期