SSM-Spring-10:Spring中cglib動態代理

weixin_34026276發表於2018-03-08

 

------------吾亦無他,唯手熟爾,謙卑若愚,好學若飢-------------

 

何為動態代理,就不扯皮了,上一篇部落格剛剛提到,那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在高版本後出現的,他的寫法優良,更具效能

 

相關文章