现在的位置: 首页 > 综合 > 正文

cglib代理实例

2018年06月10日 ⁄ 综合 ⁄ 共 1465字 ⁄ 字号 评论关闭

前言:如果感觉到使用java动态代理,必须要写接口麻烦。想直接使用类的话,就用cglib吧

目标对象:

public class Target {  
  
    public String execute() {  
        String message = "----------test()----------";  
        System.out.println(message);  
        return message;  
    }  
}

 

拦截器:

import net.sf.cglib.proxy.MethodInterceptor;  
import net.sf.cglib.proxy.MethodProxy;  
  
import java.lang.reflect.Method;  
  
public class MyMethodInterceptor implements MethodInterceptor {  
  
    public Object intercept(Object object, Method method, Object[] args,   
MethodProxy methodProxy) throws Throwable {  
        System.out.println(">>>MethodInterceptor start...");  
        Object result = methodProxy.invokeSuper(object,args);  
        System.out.println(">>>MethodInterceptor ending...");  
        return "hahahh";  
    }  
}

 

测试类:

import net.sf.cglib.proxy.Enhancer;  
  
public class TestCglibProxy  {  
  
    public static void main(String rags[]){  
        Target target = new Target();  
        TestCglibProxy test = new TestCglibProxy();  
        Target proxyTarget = (Target)test.createProxy(Target.class);  
        String res=proxyTarget.execute();  
        System.out.println(res);  
    }  
  
    public Object createProxy(Class targetClass){  
        Enhancer enhancer = new Enhancer();  
        enhancer.setSuperclass(targetClass);  
        enhancer.setCallback(new MyMethodInterceptor());  
        return enhancer.create();  
    }  
}  

 

运行结果:

C:/classes>java -cp .;C:/classes/cglib-nodep-2.1_3.jar TestCglibProxy 
>>>MethodInterceptor start... 
----------test()---------- 
>>>MethodInterceptor ending... 
hahahh

 

抱歉!评论已关闭.