码迷,mamicode.com
首页 > 其他好文 > 详细

JDK的动态代理

时间:2017-05-26 00:49:08      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:ice   public   targe   override   span   style   创建   代理   port   

先创建一个被代理对象,该对象必须继承一个接口(否则jdk无法产生动态代理)

 

接口:

技术分享
1 package com.bxw.service;
2 
3 public interface UserService {
4     public String getName(int id);
5     public Integer getAge(int id);
6 }
UserService.java

 

被代理的对象:

技术分享
 1 package com.bxw.serviceImpl;
 2 
 3 import com.bxw.service.UserService;
 4 
 5 public class UserServiceImpl implements UserService{
 6 
 7     @Override
 8     public String getName(int id) {
 9         System.out.println("---getNmae---");
10         return "Tom";
11     }
12 
13     @Override
14     public Integer getAge(int id) {
15         System.out.println("---getAge---");
16         return 17;
17     }
18 
19 }
UserServiceImpl.java

 

Handler:

技术分享
 1 package com.bxw.invocation;
 2 
 3 import java.lang.reflect.InvocationHandler;
 4 import java.lang.reflect.Method;
 5 
 6 public class MyInvocationHandler implements InvocationHandler {  
 7     //动态代理要有一个被代理的对象
 8     private Object target;  
 9   
10     MyInvocationHandler() {  
11         super();  
12     }  
13   
14     public MyInvocationHandler(Object target) {  
15         super();  
16         this.target = target;  
17     }  
18   
19     @Override  
20     public Object invoke(Object o, Method method, Object[] args) throws Throwable {  
21         if("getName".equals(method.getName())){  
22             System.out.println("++++++before " + method.getName() + "++++++");  
23             Object result = method.invoke(target, args);  
24             System.out.println("++++++after " + method.getName() + "++++++");  
25             return result;  
26         }else{  
27             Object result = method.invoke(target, args);  
28             return result;  
29         }  
30   
31     }
32 }
View Code

 

Test:

技术分享
 1 package com.bxw.test;
 2 
 3 import java.lang.reflect.InvocationHandler;
 4 import java.lang.reflect.Proxy;
 5 
 6 import com.bxw.invocation.MyInvocationHandler;
 7 import com.bxw.service.UserService;
 8 import com.bxw.serviceImpl.UserServiceImpl;
 9 
10 /**
11  * jdk要实现动态代理那么该类必须实现一个接口
12  * @author Admin
13  *
14  */
15 public class TestDemo {
16      public static void main(String[] args) {  
17             UserService userService = new UserServiceImpl(); //被代理对象 
18             InvocationHandler invocationHandler = new MyInvocationHandler(userService);  
19             //classLoader,interface,产生业务逻辑的Hanfler
20             UserService userServiceProxy = (UserService)Proxy.newProxyInstance(userService.getClass().getClassLoader(),  
21                     userService.getClass().getInterfaces(), invocationHandler);//产生的代理对象  
22             System.out.println(userServiceProxy.getName(1));  
23             System.out.println(userServiceProxy.getAge(1));  
24      }  
25 }
View Code

 

JDK的动态代理

标签:ice   public   targe   override   span   style   创建   代理   port   

原文地址:http://www.cnblogs.com/popcornya/p/6906455.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!