0
点赞
收藏
分享

微信扫一扫

Spring-aop-AbstractAutoProxyCreator


该类是aop模块很常用的一个类,为何说常用,是因为如果我们自己写一个与spring集成的东西,那么就会用到这个类

本类中有个最为重要的方法,该方法签名如下

protected Object wrapIfNecessary(Object bean, String beanName, Object cacheKey)

spring当中所有的bean在实例化的时候都会经过该方法,我们自己创建一个类A,A需要继承AbstractAutoProxyCreator,下面的代码示例展示了如果容器中有一个叫B的Bean,则为其生成一个代理,放到容器中

public class A extends AbstractAutoProxyCreator {

@Override
protected Object[] getAdvicesAndAdvisorsForBean(Class<?> arg0, String arg1, TargetSource arg2)
throws BeansException {
return null;
}

@Override
protected Object wrapIfNecessary(Object bean, String beanName, Object cacheKey) {
if (beanName.equals("B")) {
// 此处可以做点什么
TargetSource ts = new SingletonTargetSource(bean);
return ProxyFactory.getProxy(ts);
}
return super.wrapIfNecessary(bean, beanName, cacheKey);
}
}

很多与spring集成的第三方库都是使用这种方法进行集成,包括Seata,Mybatis,等许多都是使用这种方式,因为这种方式是spring推荐的一种规范,当然,如果不使用这种方式,也有很多方式依然可以在容器启动的时候进行代理,但是很少有人这么做,有时候,约定就是约定,规范就是规范,这没什么需要解释的


举报

相关推荐

0 条评论