内容简介:这是Spring注解专题系类文章,本系类文章适合Spring入门者或者原理入门者,小编会在本系类文章下进行企业级应用实战讲解以及spring源码跟进。前面一章提过,在配置类中通过@Bean来将组件注入到容器中,在容器中,Bean的生命周期大抵上可以分为创建--初始化--销毁的过程,容器管理着组件的全部生命周期。Bean注解源码里面包含initMethod和destroyMethod两个属性,可以分别来自定义bean的初始化方法和销毁方法。
Spring注解应用篇--IOC容器Bean生命周期
这是Spring注解专题系类文章,本系类文章适合Spring入门者或者原理入门者,小编会在本系类文章下进行企业级应用实战讲解以及spring源码跟进。
环境准备
- 编译器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后置处理器初始化之后的方法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ODPS权威指南
李妹芳 / 人民邮电出版社 / 2014-12 / 69元
ODPS(Open Data Processing Service)是阿里巴巴自主研发的海量数据处理和分析的服务平台,主要应用于数据分析、海量数据统计、数据挖掘、机器学习和商业智能等领域。目前,ODPS不仅在阿里内部得到广泛应用,享有很好的口碑,正逐步走向第三方开放市场。 本书是学习和掌握ODPS的权威指南,作者来自阿里ODPS团队。全书共13章,主要内容包括:ODPS入门、整体架构、数据通......一起来看看 《ODPS权威指南》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
正则表达式在线测试
正则表达式在线测试