cglib
CGLIB通过动态生成目标类的子类,并利用字节码操作技术在运行时插入代理逻辑,实现了灵活且高效的动态代理机制。这种机制在不依赖接口的情况下也能为任何类添加额外行为,特别适用于需要对现有类进行功能增强的场景。
测试服务
public class DataConverterComponent { public void convert() { System.out.println("DataConverterComponent convert"); } }
cglib代理类,需要实现MethodInterceptor接口
public class DataConverterComponentInterceptor implements MethodInterceptor { @Override public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { System.out.println("DataConverterComponentInterceptor 前"); Object result = methodProxy.invokeSuper(o, args); System.out.println("DataConverterComponentInterceptor 后"); return result; } }
测试main
public class DataConverterComponentMain { public static void main(String[] args) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(DataConverterComponent.class); enhancer.setCallback(new DataConverterComponentInterceptor()); DataConverterComponent dataConverterComponent = (DataConverterComponent) enhancer.create(); dataConverterComponent.convert(); } }
收藏文章数量从多到少与“把书读薄”是一个道理