Spring BeanPostProcessor 的执行顺序
时间:2022-07-24
本文章向大家介绍Spring BeanPostProcessor 的执行顺序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 首先 Spring 通过调用构造方法创建
User
对象; - User 对象创建好之后,先不直接进行初始化操作,通过
BeanPostProcessor
对刚创建好的 User 对象进行加工操作,其中postProcessBeforeInitialization
方法的第一个参数是 User 对象,第二个参数是在配置文件中指定的 id 值; - 加工好之后通过 return 将对象返回给 Spring 容器,然后 Spring 容器继续按照流程执行 初始化操作,先是
InitializingBean
的初始化操作; - 再是
init-method
的初始化; - 然后 Spring 容器再次将对象交给
BeanPostProcessor
,执行postProcessAfterInitialization
方法。
实际上在实战中,我们很少处理 Spring 的初始化操作,所以没有必要区分 Before 还是 After。只需要实现其中的一个即可,显然选 After 方法更好。
先定义一个实体类 Category
:
public class Category {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Category{" +
"id=" + id +
", name='" + name + ''' +
'}';
}
}
然后注入到 Spring 容器中:
<bean class="edu.lsu.pojo.Category" id="category">
<property name="id" value="1"/>
<property name="name" value="迪丽热巴"/>
</bean>
注意此时的名字是迪丽热巴。
此时我们定义一个 BeanPostProcessor,实现他的后置处理器方法,:
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
Category category = (Category) bean;
category.setName("古力娜扎");
return category;
}
}
当我们在此时的时候,输出结果就是古力娜扎;
@Test
public void test7() {
ApplicationContext ac = new ClassPathXmlApplicationContext("/applicationContext2.xml");
Category category = ac.getBean("category", Category.class);
System.out.println("category = " + category);
}
输出:
category = Category{id=1, name='古力娜扎'}
- 【干货】对抗自编码器PyTorch手把手实战系列——PyTorch实现对抗自编码器
- Selenium2+python自动化23-富文本(自动发帖)
- 2-Sat+输出可行解(个人模版)
- 协同过滤原理及Python实现
- 每周学点大数据 | No.25二叉搜索树回顾(二)
- RBF神经网络及Python实现(附源码)
- 【干货】计算机视觉实战系列03——用Python做图像处理
- Adaboost从原理到实现(Python)
- Selenium+python自动化22-发送各种类型附件邮件
- Selenium2+python自动化38-显示等待(WebDriverWait)
- 逆元(个人模版)
- Selenium2+python自动化37-爬页面源码(page_source)
- ex_gcd(个人模版)
- Selenium2+python自动化36-判断元素存在
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释