init-method方法
init-method
方法,初始化bean
的时候执行,可以针对某个具体的bean
进行配置。init-method
需要在applicationContext.xml
配置文档中bean
的定义里头写明。例如:
1 | <bean id="TestBean" class="nju.software.xkxt.util.TestBean" init-method="init"></bean> |
这样,当TestBean
在初始化的时候会执行TestBean
中定义的init
方法。
afterPropertiesSet方法
1 | public interface InitializingBean { |
afterPropertiesSet
方法,初始化bean
的时候执行,可以针对某个具体的bean
进行配置。afterPropertiesSet 必须实现 InitializingBean
接口。实现 InitializingBean
接口必须实现afterPropertiesSet
方法。
BeanPostProcessor类
BeanPostProcessor
,针对所有Spring
上下文中所有的bean
,可以在配置文档applicationContext.xml
中配置一个BeanPostProcessor
,然后对所有的bean
进行一个初始化之前和之后的代理。BeanPostProcessor
接口中有两个方法: postProcessBeforeInitialization
和postProcessAfterInitialization
。 postProcessBeforeInitialization
方法在bean
初始化之前执行, postProcessAfterInitialization
方法在bean
初始化之后执行。
前置后置处理器
Spirng中BeanPostProcessor
和InstantiationAwareBeanPostProcessorAdapter
两个接口都可以实现对bean
前置后置处理的效果,那这次先讲解一下BeanPostProcessor
处理器的使用
先看一下BeanPostProcessor
接口的源码,它定义了两个方法,一个在bean
初始化之前,一个在bean
初始化之后
1 | public interface BeanPostProcessor { |
下面,我们来实现这个类,测试一下Spring
中的前置后置处理器吧
首先是pom.xml
,增加Spring
相关的依赖
1 |
|
定义一个测试接口:
1 | public interface BaseService { |
定义接口实现类:
1 | public class ISomeService implements BaseService { |
实现BeanPostProcessor
接口
1 | public class MyBeanPostProcessor implements BeanPostProcessor { |
Spring
的配置文件如下:
1 | <!-- 注册 bean:被监控的实现类 --> |
测试类如下:
1 | public class TestBeanPostProcessor { |
测试结果截图:
可以观察到,我们明明在代码中对于doSomething
方法定义的是小写,但是通过后置处理器,拦截了原本的方法,而是通过动态代理的方式把方法的结果进行了一定程度的改变,这就是Spring
中的前置后置处理器—-BeanPostProcessor
。
总之,afterPropertiesSet
和init-method
之间的执行顺序是afterPropertiesSet
先执行,init-method
后执行。从BeanPostProcessor
的作用,可以看出最先执行的是postProcessBeforeInitialization
,然后afterPropertiesSet
,然后是init-method
,然后是postProcessAfterInitialization
。
参考文章
- https://www.cnblogs.com/twelve-eleven/p/8080038.html
- https://blog.csdn.net/weixin_40834464/article/details/82832173
如果大家喜欢我的文章,可以关注个人订阅号。欢迎随时留言、交流。