cglib代理
为了解决静态代理频繁编写代理功能缺点
分类
Cglib代理
优点: 基于字节码,会生成一个真实对象的子类
效率高
不需要接口,非jdk功能,需要导入额外cglib.jar 和
Asm.jar(字节码解析包)
缺点在使用spirng aop的时候出现Proxy和真实对象转换异常
写spring配置文件配置这里的时候
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
false 为jdk代理
创建一个真实类
public class LaoZhong { public void xiaomubiao() { System.out.println("小目标"); } }
创建一个类(注意导入的包)实现 接口 : MethodInterceptor
public class mishu3 implements MethodInterceptor{ @Override public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable { System.out.println("before"); //invoke()调用子类重写的方法 Object result = arg3.invokeSuper(arg0, arg2); System.out.println("after"); return result; } }
编写测试类
public class visitor { public static void main(String[] args) { Enhancer en=new Enhancer(); en.setSuperclass(LaoZhong.class); en.setCallback(new mishu3()); LaoZhong create = (LaoZhong) en.create(); create.xiaomubiao(); } }