Enhancer常用的方法介绍

Enhancer enhancer = new Enhancer();
1、设置要继承的父类
enhancer.setSuperclass(superclass);
2、设置要实现的接口,这里需要实现EnhancedConfiguration,因为EnhancedConfiguration集成了BeanFactoryAware,则要生成对应的实现方法,用于在谁知工厂的时候做增强处理。具体详见ImportAwareBeanPostProcessor。
private static class ImportAwareBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter {private final BeanFactory beanFactory;public ImportAwareBeanPostProcessor(BeanFactory beanFactory) {this.beanFactory = beanFactory;}@Overridepublic PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) {// Inject the BeanFactory before AutowiredAnnotationBeanPostProcessor's// postProcessPropertyValues method attempts to autowire other configuration beans.if (bean instanceof EnhancedConfiguration) {((EnhancedConfiguration) bean).setBeanFactory(this.beanFactory);}return pvs;}@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName)  {if (bean instanceof ImportAware) {ImportRegistry ir = this.beanFactory.getBean(IMPORT_REGISTRY_BEAN_NAME, ImportRegistry.class);AnnotationMetadata importingClass = ir.getImportingClassFor(bean.getClass().getSuperclass().getName());if (importingClass != null) {((ImportAware) bean).setImportMetadata(importingClass);}}return bean;}}
}
enhancer.setInterfaces(new Class<?>[] {EnhancedConfiguration.class});3、设置工厂这个还没用
enhancer.setUseFactory(false);4、作用:指定生成Bean的名字一种策略 public class SpringNamingPolicy extends DefaultNamingPolicy {public static final SpringNamingPolicy INSTANCE = new SpringNamingPolicy();@Overrideprotected String getTag() {return "BySpringCGLIB";}}
例:MathCalculator$$EnhancerBySpringCGLIB$$7e1949802152enhancer.setNamingPolicy(SpringNamingPolicy.INSTANCE);5、设置用于从该生成器创建字节码的策略。默认情况下使用{@see DefaultGeneratorStrategy}的实例。enhancer.setStrategy(new BeanFactoryAwareGeneratorStrategy(classLoader));6、在CGLib回调时可以设置对不同方法执行不同的回调逻辑,或者根本不执行回调 ,具体用法详见:CGLib中CallbackFilter介绍   链接在文章底部
enhancer.setCallbackFilter(CALLBACK_FILTER);7、设置拦截器的类型
enhancer.setCallbackTypes(CALLBACK_FILTER.getCallbackTypes());8、设置增强器的数组,通过CallbackFilte来指定哪一个方法使用哪一个拦截器,关于Callback的类型具体详见: CGLib中Callback介绍 链接在文章底部
enhancer.setCallbacks(Callback[] callbacks);

参考文章: CGLib中CallbackFilter介绍 和 CGLib中Callback介绍

CGLib中类Enhancer介绍相关推荐

  1. cglib中Enhancer介绍

    一.本文内容分类 1.接口功能. 2.接口运用场景. 3.使用案例. 4.注意事项. 二.接口功能介绍 1.Enhancer是一个类的增强器,可以完成对类的代理,在Spring中经常可以看到他的身影比 ...

  2. cglib中Enhancer的简单使用

    cglib 是一个强大的, 高效高质的代码生成库. 简单的使用方法 Enhancer中有几个常用的方法, setSuperClass和setCallback, 设置好了SuperClass后, 可以使 ...

  3. HEVC解码器HM源码阅读(二)解码器中类的介绍

    解码器中类的介绍 (***未完待续****) HM解码器包含了下面的类:     program_options_lite:参数解析     TAppDecCfg:解码器基础配置     TAppDe ...

  4. CGlib、Enhancer、ProxyFactory在springboot中的实现动态代理

    本人博客原地址:CGlib.Enhancer.ProxyFactory在springboot中的实现动态代理 创作时间:2019.06.27 11:38:35 基于springboot2.1.4 在s ...

  5. Cglib之Enhancer创建动态代理

    CGLIB是一个强大.高性能的字节码生成库,它用于在运行时扩展Java类和实现接口:本质上它是通过动态的生成一个子类去覆盖所要代理的类(非final修饰的类和方法).Enhancer是一个非常重要的类 ...

  6. Python中类的介绍及使用

    文章目录 前言 一.面向对象与面向过程 二.类的创建和使用 三.使用类和实例 1.给属性指定默认值 2.修改属性的值 四.继承 1.子类的方法__init__() 2.给子类定义属性和方法 3.重写父 ...

  7. cglib之Enhancer

    1. 背景 cglib库的Enhancer在Spring AOP中作为一种生成代理的方式被广泛使用.本文针对Enhancer的用法以实际代码为例作一些介绍. 2. Enhancer是啥 Enhance ...

  8. AspectJ和Spring AOP(java动态代理和CGLIB)简单介绍

    1.AOP介绍 什么是AOP:AOP就是面向切面编程.使用的背景: 1)我们的振隆维护着一千个方法,一天老板让振隆把这一千个方法都要加上事务代码(统一代码) 2)振隆咬咬牙,添加了一个新的方法,然后让 ...

  9. asm中的ClassWriter使用、自定义ClassVisitor和cglib的enhancer使用实例

    文章目录 ClassWriter的使用 自定义一个ClassVisitor enhancer的使用 ASM是Java中比较流行的用来读写字节码的类库,用来基于字节码层面对代码进行分析和转换.在读写的过 ...

最新文章

  1. 利用均值漂移实现图像分割的原理和OpenCV代码
  2. spring处理方法返回值的类型
  3. 在Linux中设置UMASK值
  4. RHEL5系列之三:GNOME桌面的简单管理应用(1)
  5. 基因分子生物学~DNA与蛋白质模板
  6. 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog
  7. 1106 Lowest Price in Supply Chain (25)
  8. 这才是2019年小程序的趋势,你该如何把握机会?
  9. 南昌大学计算机网络通信用什么书,南昌大学_计算机网络教材.doc
  10. Spring Boot菜鸟示例——Hello World
  11. Android 全局替换项目默认字体
  12. JAVA重写和重载的区别
  13. 计算MMMM年WW周是YYYY年MM月DD日(周一)到YYYY年MM月DD日(周日)(以JS为例)
  14. web注释@WebService,@WebMethod,@Oneway,@WebParam
  15. python数值互换_python值交换
  16. windows 安装Ubuntu 子系统
  17. mysql分组排列的查询语句_数据的排序与分组语句_MySQL
  18. 组队学习-动手学数据分析-第二章第2、3节
  19. EasyExcel实现表格导入导出
  20. 斯坦福教授研究了美国200年专利数据: 论文发得多?不等于创新!

热门文章

  1. 李昀飞:兴业数金金融行业云 中小银行转型重要引擎
  2. [绝对值不等式] 货仓选址(绝对值不等式+贪心)
  3. 104. 货仓选址——绝对值不等式的运用,中位数巧用
  4. 密室寻宝(find)
  5. 《过故人庄》古诗鉴赏
  6. 自动驾驶Apollo安装步骤
  7. Mac 最好的网页视频下载工具
  8. 深入理解css基线与行高
  9. 二叉查找树与红黑树原理和程序全面介绍
  10. web入侵二之弱口令攻击及其他