spring中的BeanPostProcessor
程序员文章站
2022-07-14 16:06:22
...
/**
* 实现BeanPostProcessor的类常用功能都有哪些
* InitDestroyAnnotationBeanPostProcessor:init和destroy方法的后处理,包括@PostConstruct和@PreDestroy注解
* AutowiredAnnotationBeanPostProcessor:处理含有@Autowired注解的参数注入
* ApplicationContextAwareProcessor:处理postProcessBeforeInitialization方法
* AsyncAnnotationBeanPostProcessor:处理@Async注解
* BeanValidationPostProcessor:参数校验
*
*/
类实现BeanPostProcessor接口,并重写postProcessBeforeInitialization和postProcessAfterInitialization方法,将类注册到IOC容器中,这两个方法会在每一个组建被创建时都被调用
postProcessBeforeInitialization:在构造方法之后,初始化方法执行之前被调用
postProcessAfterInitialization:在初始化方法执行之后被调用
下面是具体的代码
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
//bean是当前组建,beanName是当前组建在容器中的id
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization->" + bean + "->" + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization->" + bean + "->" + beanName);
return bean;
}
}
当这个容器被注册到容器中时,方法被调用的顺序如下面
Construct->postProcessBeforeInitialization->Init->postProcessAfterInitialization->Destroy
原理:
下面是源码中调用方法的顺序:
/**
* populateBean(实例化bean并为其赋值)
* {
* applyBeanPostProcessorsBeforeInitialization
* invokeInitMethods(反射调用初始化方法)
* applyBeanPostProcessorsAfterInitialization
* }
*/
推荐阅读
-
关于PHP手册中,不推荐复杂数组的引用举的一个例子,不解,该怎么处理
-
Spring boot调用Oracle存储过程的两种方式及完整代码
-
查找数组arr中第k小的奇数,如果不存在则返回0
-
Mac中怎么使用预览应用合并PDF文件 Mac预览应用合并PDF文件的技巧
-
Element-ui table中过滤条件变更表格内容的方法
-
Package.json中dependencies依赖包中^符号和~符号前缀的区别
-
Win8系统中打印机提示终结点映射器中没有更多终结点可用的解决方法
-
Package.json中dependencies依赖包中^符号和~符号前缀的区别
-
PHP中显示格式化的用户输入_PHP教程
-
ruby中的单元测试