JDK实现调用拦截器浅析

JDK实现动态代理调用拦截器中的方法的过程是什么呢?

创新互联2013年至今,是专业互联网技术服务公司,拥有项目成都网站制作、网站建设、外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元袁州做网站,已为上家服务,为袁州各地企业和个人服务,联系电话:18980820575

JDK实现调用拦截器之一:

实现接口的实例来生成代理,因此创建一个接口

interface person

 
 
 
  1. package cn.edu.hld;   
  2.  
  3. public interface Person   
  4. {   
  5. public void info() ;   
  6. public void run() ;   
  7. }  

JDK实现调用拦截器之二:

提供一个Person接口的实现类.

类PersonImpl .java

 
 
 
  1. package cn.edu.hld;   
  2.  
  3. public class PersonImpl implements Person   
  4. {   
  5.  
  6. public void info()   
  7. {   
  8. // TODO Auto-generated method stub   
  9. System.out.println("我是thtwin") ;   
  10.  
  11. }   
  12. public void run()   
  13. {   
  14. // TODO Auto-generated method stub   
  15. System.out.println("我想跑得快一些!");   
  16. }   
  17. }  

JDK实现调用拦截器之三:

实现核心的拦截器类当某个方法被JDK调用之前或之后执行相应的拦截器的方法.至于要拦截哪一个对象,则需通过后面的操作来体现.

PersonIntercepter.java

 
 
 
  1. package cn.edu.hld;   
  2.  
  3. public class PersonIntercepter   
  4. {   
  5. public void method1()   
  6. {   
  7. System.out.println("method_1被执行了!") ;   
  8. }   
  9. public void method2()   
  10. {   
  11. System.out.println("method_2被执行了!") ;   
  12. }   
  13. }  

JDK实现调用拦截器之四:

为了让拦截器知道其要拦截的目标对象,以及其应执行的方法,则应该创建一个类,该类实现一个JDK反射体系里的接口InvocationHandler.

ProxyHandler .java

 
 
 
  1. package cn.edu.hld;   
  2.  
  3. import java.lang.reflect.InvocationHandler;   
  4. import java.lang.reflect.Method;   
  5.  
  6. public class ProxyHandler implements InvocationHandler   
  7. {   
  8. private Object target ;   
  9. private PersonIntercepter pi = new PersonIntercepter() ;   
  10. public Object invoke(Object proxy, Method method, Object[] args)   
  11. throws Throwable   
  12. {   
  13. Object result = null ;   
  14. if(method.getName().equals("info"))   
  15. {   
  16. pi.method1() ;   
  17. result = method.invoke(target, args) ;   
  18. pi.method2() ;   
  19. }   
  20. else   
  21. {   
  22. result = method.invoke(target, args) ;   
  23. }   
  24. return result;   
  25. }   
  26. public void setTarget(Object target)   
  27. {   
  28. this.target = target;   
  29. }   
  30. }  

JDK实现调用拦截器之五:

为了根据目标对象生成一个代理对象,还应该创建一个代理工厂.

MyProxyFactory.java

 
 
 
  1. package cn.edu.hld;   
  2.  
  3. import java.lang.reflect.Proxy;   
  4.  
  5. public class MyProxyFactory   
  6. {   
  7. public static Object getProxy(Object target)   
  8. {   
  9. ProxyHandler handler = new ProxyHandler() ;   
  10. handler.setTarget(target) ;   
  11. return Proxy.newProxyInstance(PersonImpl.class.getClassLoader()   
  12. ,target.getClass().getInterfaces(),handler) ;   
  13. }   
  14. }  

JDK实现调用拦截器之六:

主程序的实现.

TestPerson.java

 
 
 
  1. package cn.edu.hld;   
  2.  
  3. public class TestPerson   
  4. {   
  5. public static void main(String args[])   
  6. {   
  7. Person targetPerson = new PersonImpl() ;   
  8. Person person = null ;   
  9. Object proxy = MyProxyFactory.getProxy(targetPerson) ;   
  10. if(proxy instanceof Person)   
  11. {   
  12. person = (Person)proxy ;   
  13. }   
  14. person.info() ;   
  15. person.run() ;   
  16. }   
  17. }  

JDK实现调用拦截器之七:

直接在MyEclipse中运行.得到结果如下:

 
 
 
  1. method_1被执行了!   
  2. 我是thtwin   
  3. method_2被执行了!   
  4. 我想跑得快一些! 

JDK实现调用拦截器的基本框架和方法就介绍完了,那么现在你对JDK实现调用拦截器是不是有所了解了呢?

文章题目:JDK实现调用拦截器浅析
网页URL:http://www.csdahua.cn/qtweb/news11/89711.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网