------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
何为动态代理,就不扯皮了,上一篇博客刚刚提到,那cglib动态代理又怎么写,我拿个和上个例子相似的案例来写
具体案例:
一个SomeServiceImpl接口
package cn.dawn.day10cglibdtproxy; /** * Created by Dawn on 2018/3/8. */ public class SomeServiceImpl { public void doSome() { System.out.println("do something"); } }
一个测试类,我直接在测试类中使用cglib动态代理
package cn.dawn.day10cglibdtproxy; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import java.lang.reflect.Method; /** * Created by Dawn on 2018/3/8. */ public class Test { public static void main(String[] args) { //模板 final SomeServiceImpl service=new SomeServiceImpl(); //cglib动态代理 Enhancer enhancer=new Enhancer(); //设置模板 enhancer.setSuperclass(service.getClass()); //回调函数 enhancer.setCallback(new MethodInterceptor() { public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("前置增强内容---------------"); methodProxy.invoke(service,objects); return null; } }); //创建代理对象 SomeServiceImpl proxy = (SomeServiceImpl)enhancer.create(); //代理对象调用原方法 proxy.doSome(); } }
他的写法就如上所示,需要以上的注释所标明的步骤
值得一提的是MethodProxy这个东西,他见过吗?他类似Method都是对此类的方法的反射,但是前者是Spring在高版本后出现的,他的写法优良,更具性能