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

创新互联2013年至今,是专业互联网技术服务公司,拥有项目成都网站制作、网站建设、外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元袁州做网站,已为上家服务,为袁州各地企业和个人服务,联系电话:18980820575
JDK实现调用拦截器之一:
实现接口的实例来生成代理,因此创建一个接口
interface person
- package cn.edu.hld;
 - public interface Person
 - {
 - public void info() ;
 - public void run() ;
 - }
 
JDK实现调用拦截器之二:
提供一个Person接口的实现类.
类PersonImpl .java
- package cn.edu.hld;
 - public class PersonImpl implements Person
 - {
 - public void info()
 - {
 - // TODO Auto-generated method stub
 - System.out.println("我是thtwin") ;
 - }
 - public void run()
 - {
 - // TODO Auto-generated method stub
 - System.out.println("我想跑得快一些!");
 - }
 - }
 
JDK实现调用拦截器之三:
实现核心的拦截器类当某个方法被JDK调用之前或之后执行相应的拦截器的方法.至于要拦截哪一个对象,则需通过后面的操作来体现.
PersonIntercepter.java
- package cn.edu.hld;
 - public class PersonIntercepter
 - {
 - public void method1()
 - {
 - System.out.println("method_1被执行了!") ;
 - }
 - public void method2()
 - {
 - System.out.println("method_2被执行了!") ;
 - }
 - }
 
JDK实现调用拦截器之四:
为了让拦截器知道其要拦截的目标对象,以及其应执行的方法,则应该创建一个类,该类实现一个JDK反射体系里的接口InvocationHandler.
ProxyHandler .java
- package cn.edu.hld;
 - import java.lang.reflect.InvocationHandler;
 - import java.lang.reflect.Method;
 - public class ProxyHandler implements InvocationHandler
 - {
 - private Object target ;
 - private PersonIntercepter pi = new PersonIntercepter() ;
 - public Object invoke(Object proxy, Method method, Object[] args)
 - throws Throwable
 - {
 - Object result = null ;
 - if(method.getName().equals("info"))
 - {
 - pi.method1() ;
 - result = method.invoke(target, args) ;
 - pi.method2() ;
 - }
 - else
 - {
 - result = method.invoke(target, args) ;
 - }
 - return result;
 - }
 - public void setTarget(Object target)
 - {
 - this.target = target;
 - }
 - }
 
JDK实现调用拦截器之五:
为了根据目标对象生成一个代理对象,还应该创建一个代理工厂.
MyProxyFactory.java
- package cn.edu.hld;
 - import java.lang.reflect.Proxy;
 - public class MyProxyFactory
 - {
 - public static Object getProxy(Object target)
 - {
 - ProxyHandler handler = new ProxyHandler() ;
 - handler.setTarget(target) ;
 - return Proxy.newProxyInstance(PersonImpl.class.getClassLoader()
 - ,target.getClass().getInterfaces(),handler) ;
 - }
 - }
 
JDK实现调用拦截器之六:
主程序的实现.
TestPerson.java
- package cn.edu.hld;
 - public class TestPerson
 - {
 - public static void main(String args[])
 - {
 - Person targetPerson = new PersonImpl() ;
 - Person person = null ;
 - Object proxy = MyProxyFactory.getProxy(targetPerson) ;
 - if(proxy instanceof Person)
 - {
 - person = (Person)proxy ;
 - }
 - person.info() ;
 - person.run() ;
 - }
 - }
 
JDK实现调用拦截器之七:
直接在MyEclipse中运行.得到结果如下:
- method_1被执行了!
 - 我是thtwin
 - method_2被执行了!
 - 我想跑得快一些!
 
JDK实现调用拦截器的基本框架和方法就介绍完了,那么现在你对JDK实现调用拦截器是不是有所了解了呢?
                文章题目:JDK实现调用拦截器浅析
                
                网页URL:http://www.csdahua.cn/qtweb/news11/89711.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网