Spring容器的Bean后处理器

Spring的Bean后处理器的理解和使用

一:理解

1:Bean后处理器是一种特殊的Bean,容器中所有的Bean在初始化时,均会自动执行该类的两个方法
2:如何使用?
自定义一个类,用来实现接口BeanPostProcessor
3:该接口中有两个方法需要实现,
public Object postProcessBeforeInitialization(Object bean, String beanId) throws BeansException { } 此方法在Bean初始化完毕之前被自动调用
public Object postProcessAfterInitialization(Object bean, String beanId) throws BeansException { } 此方法在Beran初始化完成之后被调用
4:参数理解:上面两个方法中的第一个参数是系统即将初始化的Bean实例,第二个参数是该Bean实例的id属性值.若Bean没有id就是name属性值

二:使用和对业务方法进行增强(使用jdk代理)

例如:在Bean初始化之后对业务方法进行增强,这里就打印开始执行时间和结束执行时间作为简单的示范

public Object postProcessAfterInitialization(final Object bean,
String beanName) throws BeansException {
// 对ISomeService的DoSome()方法进行增强
if (“调用的Bean的id”.equals(beanName)) {
Object proxy =Proxy.newProxyInstance(bean.getClass().getClassLoader(), bean.getClass().getInterfaces(),
new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (“Bean中的业务法”.equals(method.getName())) {
System.out.println(“目标方法执行开始时间:” + System.currentTimeMillis());
// 执行目标方法
Object result = method.invoke(bean, args);
System.out.println(“目标方法执行结束时间:” + System.currentTimeMillis());
return result;
}
return method.invoke(bean, args);
}
});
return proxy;
}
return bean;
}

你可能感兴趣的:(#spring,java,spring)