動的エージェントCGlibインスタンス

7670 ワード

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();

        

    



    }



}