cglib动态代理

代理即为访问对象添加一层控制层,使其间接化,控制层可以为对象访问添加操作属性。

cglib:Code Generation library,

  • 基于ASM(java字节码操作码)的高性能代码生成包
  • 被许多AOP框架使用
  • 区别于JDK动态代理,cglib不需要实现接口。

实例:

 1  import java.lang.reflect.Method;  
 2    
 3  import net.sf.cglib.proxy.Enhancer;  
 4  import net.sf.cglib.proxy.MethodInterceptor;  
 5  import net.sf.cglib.proxy.MethodProxy;  
 6    
 7    
 8  public class MyMethodInterceptor implements MethodInterceptor {        
 9      
10  
11      public String myFun(String arg){  
12          return "hello," + arg ;  
13      }  
14       
15      public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {  
16          String methodName = method.getName();  
17           
18          System. out .println( "[intercept] fun invoked before" );  
19          String result = (String)args[0] + "..." ;  
20          System. out .println( result );  
21          System. out .println( "[intercept] fun invoked after" );  
22          return result;       
23      }  
24       
25      public Object createProxy(){  
26          Enhancer enhancer = new Enhancer();  
27          enhancer.setSuperclass(MyMethodInterceptor. class );  
28          enhancer.setCallback( this );  
29          return enhancer.create();  
30      }  
31       
32       
33      public static void main(String[] args) {  
34          MyMethodInterceptor ss = new MyMethodInterceptor();  
35          MyMethodInterceptor proxy = (MyMethodInterceptor)ss.createProxy();  
36 
37          c1.myFun( "cglib test" );  
38           
39      }  
40    
41  }  

 通用工具类:

 1 package org.windwant.spring.core.proxy;
 2 
 3 import org.springframework.cglib.proxy.Enhancer;
 4 import org.springframework.cglib.proxy.MethodInterceptor;
 5 import org.springframework.cglib.proxy.MethodProxy;
 6 
 7 import java.lang.reflect.Method;
 8 
 9 /**
10  * Created by windwant on 2016/6/4.
11  */
12 public class MyCGLIBProxy implements MethodInterceptor {
13     private Enhancer enhancer = new Enhancer();
14     public Object getProxy(Class clazz){
15         enhancer.setSuperclass(clazz);
16         enhancer.setCallback(this);
17         return enhancer.create();
18     }
19 
20     public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
21         System.out.println("cglib before action");
22         Object result = methodProxy.invokeSuper(o, objects);
23         System.out.println("cglib after action");
24         return result;
25     }
26 }
1 MyCGLIBProxy p = new MyCGLIBProxy();
2 Performer pp = (Performer) p.getProxy(XXXX.class);
3 pp.XXXX();

 

转载于:https://www.cnblogs.com/niejunlei/p/5988656.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值