摘要:的在單例被破壞時由進行方法調用。定義并實現這兩個接口容器創建完成注解是的縮寫,意思是規范提案。在創建完成并且屬性賦值完成來執行初始化方法在容器銷毀之前回調通知支持自動裝配,類似。
Spring注解應用篇--IOC容器Bean生命周期
這是Spring注解專題系類文章,本系類文章適合Spring入門者或者原理入門者,小編會在本系類文章下進行企業級應用實戰講解以及spring源碼跟進。環境準備
本文來自公眾號:B一下爪哇
編譯器IDEA
maven依賴spring-context version:4.3.12.RELEASE
maven依賴junit version:4.11
Bean注解來指定bean初始化和銷毀方法前面一章提過,在配置類中通過@Bean來將組件注入到容器中,在容器中,Bean的生命周期大抵上可以分為創建--初始化--銷毀的過程,容器管理著組件的全部生命周期。Bean注解源碼里面包含initMethod和destroyMethod兩個屬性,可以分別來自定義bean的初始化方法和銷毀方法。
自定義格式:
@Bean(initMethod=,destoryMethod=)
測試:
先在Bean中自定義初始化和銷毀方法:
public class ExampleBean { private String name; private int age; ..... public void init(){ System.out.println("ExampleB init..."); } public void destory(){ System.out.println("Example destory..."); } }
配置類:
@Configuration public class BaseConfig { @Bean(value="beanIdDefinition",initMethod = "init",destroyMethod = "destory") public ExampleBean exampleBean(){ return new ExampleBean(); } }
測試類:
@Test public void shouldAnswerWithTrue() { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(BaseConfig.class); System.out.println("IOC容器創建完成..."); String[] beanDefinitionNames = ctx.getBeanDefinitionNames(); ctx.close(); }
output:
exampleBean constructor...... ExampleB init... IOC容器創建完成... Example destory...
由此可知,在容器初始化過程中已經完成對bean的初始化工作,并且在容器關閉途中,調用bean的銷毀方法。(下一章分析容器初始化大致做了哪一些工作)
InitializingBean和DisposableBean接口指定Bean初始化和銷毀方法InitializingBean的afterPropertiesSet在設置提供Bean的屬性值后由BeanFactory調用進行方法調用。
DisposableBean的destory在Bean單例被破壞時由BeanFactory進行方法調用。
定義Bean并實現這兩個接口
public class LifeCycleBean implements InitializingBean, DisposableBean{ @Override public void afterPropertiesSet() throws Exception { System.out.println("LifeCycleBean afterPropertieSet...."); } @Override public void destroy() throws Exception { System.out.println("LifeCycleBean destory...."); } }
output:
LifeCycleBean afterPropertieSet.... IOC容器創建完成... LifeCycleBean destory....PostConstruct & PreDestory注解
JSR是Java Specification Requests的縮寫,意思是Java 規范提案。
JSR250已經添加至Java SE6中,常用的大概就是PostConstruct初始化、PreDestory銷毀、Resource資源等。
Spring支持JSR250的注解。PostConstruct在bean創建完成并且屬性賦值完成;來執行初始化方法;PreDestory在容器銷毀bean之前回調通知;Resource支持bean自動裝配,類似Autowired。
使用方式,在Bean中直接添加:
@PostConstruct public void initPost(){ System.out.println("ExampleBean JSR250 PostConstruct..."); } @PreDestroy public void destoryPre(){ System.out.println("ExampleBean JSR250 PreDestory..."); }
測試output:
exampleBean constructor...... ExampleBean JSR250 PostConstruct... IOC容器創建完成... ExampleBean JSR250 PreDestory...BeanPostProcessor后置處理器
BeanPostProcessor【接口】:bean后置處理器在Bean的生命周期起到一個承上啟下的作用,在Bean初始化前后進行處理工作。
PostProcessorBeforeInitialization方法:在初始化方法調用之前調用;
postProcessorBefore方法:在bean初始化方法調用之后工作
兩個方法都包含2個相同的參數:
@param Object o:Bean實例
@param String s:beanName
定義一個Bean實現后置處理器接口:
public class BeanPostProcessorDefinition implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object o, String s) throws BeansException { System.out.println("postProcessBeforeInitialization -->"+s+" = "+o); return o; } @Override public Object postProcessAfterInitialization(Object o, String s) throws BeansException { System.out.println("postProcessorAfterInitialization -->"+s+"="+o); return o; } }
以容器中存在的id為exampleBean的bean為例:查看output:
//部分容器初始化的一些bean exampleBean constructor...... postProcessBeforeInitialization -->exampleBean = ExampleBean{name="null", age=0} ExampleBean JSR250 PostConstruct... postProcessorAfterInitialization -->exampleBean=ExampleBean{name="null", age=0} IOC容器創建完成...
由此不難得出,在容器初始化過程中,大致依次完成bean的創建,實例化,屬性賦值,執行bean后置處理器初始化之前的方法,執行初始化方法,執行bean后置處理器初始化之后的方法。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74626.html
摘要:用法先創建個組件,,,分別在類上加上注解。發現有一個屬性源碼注釋這樣說的自動檢測使用組件。在的方法中,表示不匹配,代表匹配。這就說明使用注冊組件有種方式。 Spring注解應用篇--IOC容器Bean組件注冊 這是Spring注解專題系類文章,本系類文章適合Spring入門者或者原理入門者,小編會在本系類文章下進行企業級應用實戰講解以及spring源碼跟進。 環境準備 編譯器IDEA...
摘要:那么為什么可以帶給我們這樣的完美編碼體驗呢實際上,這完全歸功于的封裝,由于在服務注冊與發現客戶端負載均衡等方面都做了很好的抽象,而上層應用方面依賴的都是這些抽象接口,而非針對某個具體中間件的實現。 通過《Spring Cloud Alibaba基礎教程:使用Nacos實現服務注冊與發現》一文的學習,我們已經學會如何使用Nacos來實現服務的注冊與發現,同時也介紹如何通過LoadBala...
摘要:響應式編程是基于異步和事件驅動的非阻塞程序,只是垂直通過在內啟動少量線程擴展,而不是水平通過集群擴展。三特性常用的生產的特性如下響應式編程模型適用性內嵌容器組件還有對日志消息測試及擴展等支持。 摘要: 原創出處 https://www.bysocket.com 「公眾號:泥瓦匠BYSocket 」歡迎關注和轉載,保留摘要,謝謝! 02:WebFlux 快速入門實踐 文章工程: JDK...
摘要:靈活性和針對性。所以我覺得大部分組件還是自己封裝來的更為方便和靈活一些。動手開干接下來我們一起手摸手教改造包裝一個插件,只要幾分鐘就可以封裝一個專屬于你的。 項目地址:vue-countTo配套完整后臺demo地址:vue-element-admin系類文章一:手摸手,帶你用vue擼后臺 系列一(基礎篇)系類文章二:手摸手,帶你用vue擼后臺 系列二(登錄權限篇)系類文章三:手摸手,帶...
閱讀 1977·2021-11-24 10:45
閱讀 1465·2021-11-18 13:15
閱讀 4558·2021-09-22 15:47
閱讀 3937·2021-09-09 11:36
閱讀 2018·2019-08-30 15:44
閱讀 3096·2019-08-29 13:05
閱讀 2508·2019-08-29 12:54
閱讀 2001·2019-08-26 13:47