SSM-Spring-10:Spring中cglib动态代理

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

何为动态代理,就不扯皮了,上一篇博客刚刚提到,那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在高版本后出现的,他的写法优良,更具性能

上一篇:U-boot的编译方式及目录结构解析


下一篇:JavaBean简单及使用