首页 > 其他 > 详细

动态代理CGlib实例

时间:2014-10-05 15:37:58      阅读:325      评论:0      收藏:0      [点我收藏+]

1.委托类;

package 动态代理2;
//需要对这个类进行增强

public class UserService {
    
    public void create()
    {
        System.out.println("创建用户");
    }
    public  void update()
    {
        System.out.println("更新用户");
        
    }

}

2.代理类的实现

 1 package 动态代理2;
 2 
 3 import java.lang.reflect.Method;
 4 
 5 import net.sf.cglib.proxy.Enhancer;
 6 import net.sf.cglib.proxy.MethodInterceptor;
 7 import net.sf.cglib.proxy.MethodProxy;
 8 
 9 public class ProxyCglib implements MethodInterceptor{
10     //根据传入的名字来判断是否有操作权限
11     private Enhancer enhancer=new Enhancer();
12     
13     private String name=null;
14     
15     public ProxyCglib(String name)
16     {
17         this.name=name;
18         
19     }
20     //获得代理类的对象,传入参数为委托类
21     public Object getProxy(Class clazz){
22           //设置需要创建子类的类
23           enhancer.setSuperclass(clazz);
24           enhancer.setCallback(this);
25           //通过字节码技术动态创建子类实例
26           return enhancer.create();
27          }
28 
29 
30     
31     public Object intercept(Object arg0, Method arg1, Object[] arg2,
32             MethodProxy arg3) throws Throwable {
33         // TODO Auto-generated method stub
34         
35         if(!name.equals("han"))
36         {
37          System.out.println("权限不足");
38         }
39         else
40         {
41             arg3.invokeSuper(arg0, arg2);
42             
43         }
44         
45         return null;
46     }
47     
48 
49 }

3.客户端:测试

package 动态代理2;
//ref: http://songbo-mail-126-com.iteye.com/blog/968792

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //为用户张三创建一个代理对象
    /*    
        ProxyCglib proxy=new ProxyCglib("张三");
        UserService user=(UserService) proxy.getProxy(UserService.class);
        user.create(); */
        
        ProxyCglib proxy2=new ProxyCglib("han");
        UserService user2 =(UserService) proxy2.getProxy(UserService.class);
        user2.create();
        
    

    }

}

 

动态代理CGlib实例

原文:http://www.cnblogs.com/hansongjiang/p/4007040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!