Spring BeanPostProcessor
bean后处理器允许在bean初始化回调方法之前和之后进行额外的处理。 bean后处理器的主要特征是它将逐个处理IoC容器中的所有bean实例,而不仅仅是单个bean实例。
通常,bean后处理器用于根据特定标准检查bean属性的有效性或更改bean属性。
BeanPostProcessor接口
要在spring中创建bean后处理器类:
1、实现BeanPostProcessor接口
2、实现postProcessBeforeInitialization()和postProcessAfterInitialization()方法。
然后,Spring会在调用初始化回调方法之前和之后将每个bean实例传递给这两个方法,您可以按照自己喜欢的方式处理bean实例。
CustomBeanPostProcessor.java
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class CustomBeanPostProcessor implements BeanPostProcessor
{
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
{
System.out.println("Called postProcessBeforeInitialization() for :" + beanName);
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException
{
System.out.println("Called postProcessAfterInitialization() for :" + beanName);
return bean;
}
}
调用时机
通常,spring的DI容器会执行以下操作来创建bean:
1、通过构造函数或工厂方法创建bean实例
2、设置bean属性的值和bean引用
3、调用所有Aware接口中定义的setter方法
4、将bean实例传递给每个bean后处理器的postProcessBeforeInitialization()方法
5、调用初始化回调方法
6、将bean实例传递给每个bean后处理器的postProcessAfterInitialization()方法
7、bean已准备好
8、关闭容器时,调用销毁回调方法
注册BeanPostProcessor
要在应用程序上下文文件中注册bean后处理器,请在bean配置文件(例如beans.xml)中声明处理器的实例,然后它将自动注册。
例子
EmployeeDAOImpl.java
public class EmployeeDAOImpl implements EmployeeDAO
{
public EmployeeDTO createNewEmployee()
{
EmployeeDTO e = new EmployeeDTO();
e.setId(1);
e.setFirstName("Lokesh");
e.setLastName("Gupta");
return e;
}
public void initBean() {
System.out.println("Init Bean for : EmployeeDAOImpl");
}
public void destroyBean() {
System.out.println("Init Bean for : EmployeeDAOImpl");
}
}
配置文件:
beans.xml
<bean id="customBeanPostProcessor" class="com.howtodoinjava.demo.processors.CustomBeanPostProcessor" />
<bean id="dao" class="com.howtodoinjava.demo.dao.EmployeeDAOImpl" init-method="initBean" destroy-method="destroyBean"/>
现在让我们启动DI容器并查看输出:
Demo.java
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Console:
Called postProcessBeforeInitialization() for : dao
Init Bean for : EmployeeDAOImpl
Called postProcessAfterInitialization() for : dao
显然,在初始化方法之前和之后调用BeanPostProcessor接口的方法。
转载于:https://my.oschina.net/killnull/blog/1929059
上一篇: y7000p install manjaro:solve unable reboot,unable use wifi,vi edit unnormal, cause by gpu driver,etc
下一篇: Spring中的InstantiationAwareBeanPostProcessor和BeanPostProcessor
推荐阅读
-
JSP开发之Spring方法注入之替换方法实现
-
JSP Spring配置文件中传值的实例详解
-
spring为java.util.Properties类型的属性进行赋值过程解析
-
Spring AOP定义AfterReturning增加实例分析
-
spring级联属性赋值的两种方式解析
-
spring如何使用命名空间p简化bean的配置
-
JSP Spring防止用户重复登录的实现方法
-
JSP 开发之Spring Boot 动态创建Bean
-
spring5 源码深度解析----- 被面试官给虐懵了,竟然是因为我不懂@Configuration配置类及@Bean的原理
-
Spring Cloud Ribbon实现客户端负载均衡的示例