CGLib中类Enhancer介绍
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介绍相关推荐
- cglib中Enhancer介绍
一.本文内容分类 1.接口功能. 2.接口运用场景. 3.使用案例. 4.注意事项. 二.接口功能介绍 1.Enhancer是一个类的增强器,可以完成对类的代理,在Spring中经常可以看到他的身影比 ...
- cglib中Enhancer的简单使用
cglib 是一个强大的, 高效高质的代码生成库. 简单的使用方法 Enhancer中有几个常用的方法, setSuperClass和setCallback, 设置好了SuperClass后, 可以使 ...
- HEVC解码器HM源码阅读(二)解码器中类的介绍
解码器中类的介绍 (***未完待续****) HM解码器包含了下面的类: program_options_lite:参数解析 TAppDecCfg:解码器基础配置 TAppDe ...
- CGlib、Enhancer、ProxyFactory在springboot中的实现动态代理
本人博客原地址:CGlib.Enhancer.ProxyFactory在springboot中的实现动态代理 创作时间:2019.06.27 11:38:35 基于springboot2.1.4 在s ...
- Cglib之Enhancer创建动态代理
CGLIB是一个强大.高性能的字节码生成库,它用于在运行时扩展Java类和实现接口:本质上它是通过动态的生成一个子类去覆盖所要代理的类(非final修饰的类和方法).Enhancer是一个非常重要的类 ...
- Python中类的介绍及使用
文章目录 前言 一.面向对象与面向过程 二.类的创建和使用 三.使用类和实例 1.给属性指定默认值 2.修改属性的值 四.继承 1.子类的方法__init__() 2.给子类定义属性和方法 3.重写父 ...
- cglib之Enhancer
1. 背景 cglib库的Enhancer在Spring AOP中作为一种生成代理的方式被广泛使用.本文针对Enhancer的用法以实际代码为例作一些介绍. 2. Enhancer是啥 Enhance ...
- AspectJ和Spring AOP(java动态代理和CGLIB)简单介绍
1.AOP介绍 什么是AOP:AOP就是面向切面编程.使用的背景: 1)我们的振隆维护着一千个方法,一天老板让振隆把这一千个方法都要加上事务代码(统一代码) 2)振隆咬咬牙,添加了一个新的方法,然后让 ...
- asm中的ClassWriter使用、自定义ClassVisitor和cglib的enhancer使用实例
文章目录 ClassWriter的使用 自定义一个ClassVisitor enhancer的使用 ASM是Java中比较流行的用来读写字节码的类库,用来基于字节码层面对代码进行分析和转换.在读写的过 ...
最新文章
- 利用均值漂移实现图像分割的原理和OpenCV代码
- spring处理方法返回值的类型
- 在Linux中设置UMASK值
- RHEL5系列之三:GNOME桌面的简单管理应用(1)
- 基因分子生物学~DNA与蛋白质模板
- 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog
- 1106 Lowest Price in Supply Chain (25)
- 这才是2019年小程序的趋势,你该如何把握机会?
- 南昌大学计算机网络通信用什么书,南昌大学_计算机网络教材.doc
- Spring Boot菜鸟示例——Hello World
- Android 全局替换项目默认字体
- JAVA重写和重载的区别
- 计算MMMM年WW周是YYYY年MM月DD日(周一)到YYYY年MM月DD日(周日)(以JS为例)
- web注释@WebService,@WebMethod,@Oneway,@WebParam
- python数值互换_python值交换
- windows 安装Ubuntu 子系统
- mysql分组排列的查询语句_数据的排序与分组语句_MySQL
- 组队学习-动手学数据分析-第二章第2、3节
- EasyExcel实现表格导入导出
- 斯坦福教授研究了美国200年专利数据: 论文发得多?不等于创新!