Bean的生命周期指Bean创建-->初始化-->销毁 的过程
我们可以自定义Bean初始化和销毁方法
容器在bean进行到当前生命周期的时候, 来调用自定义的初始化和销毁方法
早期xml的方式,在<bean>标签里 需要写 init-method destroy-method,指定初始化的方法要做的事以及销毁的时候要做的事,如下图所示:
后来可以直接用注解的方式:
单例Bean的生命周期就是
ioc容器创建的时候,会调用单例bean的构造器以及init方法初始化bean;
ioc容器关闭的时候,调用destory销毁bean。
测试:
如上图所示,单例Bean的生命周期就是 ioc容器创建的时候,会调用单例bean的构造器以及init方法初始化bean;ioc容器关闭的时候,调用destory销毁bean。
对于多实例的bean,容器只负责初始化, 但不会管理bean, 容器关闭时不会调用销毁方法
可以添加 @Scope("prototype") 来验证
测试:可以看到Sandy类里写的任何输出都没有
init:实现 InitializingBean 接口的 afterPropertiesSet() 方法,当 beanFactory 创建好对象,且把bean所有属性设置好之后,会调这个方法,相当于初始化方法
destory:实现 DisposableBean的destory()方法,当bean销毁时,会把单实例bean进行销毁
测试类:
测试:
在bean初始化之前调用进行拦截,在bean初始化前后进行一些处理工作
使用BeanPostProcessor如何控制Bean的生命周期;
实现BeanPostProcessor的两个接口即可
1, postProcessBeforeInitialization()
2,postProcessAfterInitialization()
实体类SuSan:用注解@PostConstruct标注了 init ,用@PreDestroy 标注了destory 方法
空的实体类:和有初始化和销毁方法的SuSan类做对比
实现了 BeanPostProcessor 接口的类 T
然后是配置类:
因为我在实体类上标注了 @Component , 在配置类上又标注了@ComponentScan
这样配置类就可以把相应路径下的包里加了 @Component、@Service、@Controller等注解的类自动注入到容器中,所以在配置类里就不用再写对应实体类写方法 然后方法头上加@Bean了。
测试类:
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!