本文主要是介绍手动实现可开关的Cglib代理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
要实现可开关的cglib代理,需要依赖@Import,ImportSelector,BeanPostProcessor原理就是依赖@Import注解的开关作用,动态将BeanPostProcessor的实现添加到spring容器,通过beanPostProcessor插手bean的实例化过程,我们就能控制是返回代理对象还是目标对象。
-
先定义一个我们自己的注解,依赖了@Import
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Import(CglibImportSelector.class) public @interface EnableCglib { }
2.创建一个ImportSelector,实现方法的返回类全名会注册到spring
public class CglibImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{CglibBeanPostProcessor.class.getName()};} }
3.创建一个BeanPostProcessor,这里有简单的判断加了自定义注解@Cglib的类就会返回代理对象否则返回目标对象
public class CglibBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitializa
这篇关于手动实现可开关的Cglib代理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!