理论:Spring Bean后处理器是Spring框架提供的一种扩展机制,划重点:扩展机制。用于在Spring容器实例化、配置和初始化Bean的过程中,添加自定义逻辑。(大白话:后处理器是可以在Bean的生命周期的不同阶段 进行干预,可以对Bean进行修改、增强或者执行其他操作。开发者只要去实现,Spring当中的BeanPostProcessor接口,那么就能插手SpringBean实例化的一个过程)
//创建一个AI接口
public interface AI {
public void show();
}
//修改A类实现AI接口
public class A implements AI {
public A() {
System.out.println("这是A对象被创建了");
}
public void initA() {
System.out.println("这里是初始化A的方法");
}
public void destroyA() {
System.out.println("这里是销毁A的方法");
}
@Override
public void show() {
System.out.println("--这是目标A对象的show方法--");
}
}
1、创建一个类去实现后置处理器的接口(top.starrylsi.handler)
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("这是初始化之前: bean->[" + bean + "] , beanName ->["
+ beanName + "]");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("这是初始化之后: bean->[" + bean + "] , beanName ->["
+ beanName + "]");
if ("a".equals(beanName)) {
// 创建一个jdk动态代理
AI proxyAi = (AI) Proxy.newProxyInstance(bean.getClass()
.getClassLoader(), bean.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
System.out.println("这是前置增强代码");
Object result = method.invoke(bean, args);
System.out.println("这是后置增强代码");
return result;
}
});
return proxyAi;
} else {
return bean;
}
// return bean;
}
2、到Spring的配置文件中去配置后置处理器
<!--
init-method="initA" 设置初始化方法
destroy-method="destroyA" 设置销毁的方法
-->
<bean id="a" class="com.zhuama.pojo.A" init-method="initA" destroy-method="destroyA"></bean>
<!-- 配置Bean的后配置处理器。 -->
<bean class="com.zhuama.util.MyBeanPostProcessor" />
测试的代码:
@Test
public void test24() {
@SuppressWarnings("resource")
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"application2.xml");
AI ai = (AI) applicationContext.getBean("a");
ai.show();
}
评论 (0)