新聞中心
JDK實現(xiàn)動態(tài)代理調(diào)用攔截器中的方法的過程是什么呢?

創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元袁州做網(wǎng)站,已為上家服務(wù),為袁州各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575
JDK實現(xiàn)調(diào)用攔截器之一:
實現(xiàn)接口的實例來生成代理,因此創(chuàng)建一個接口
interface person
- package cn.edu.hld;
- public interface Person
- {
- public void info() ;
- public void run() ;
- }
JDK實現(xiàn)調(diào)用攔截器之二:
提供一個Person接口的實現(xiàn)類.
類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實現(xiàn)調(diào)用攔截器之三:
實現(xiàn)核心的攔截器類當(dāng)某個方法被JDK調(diào)用之前或之后執(zhí)行相應(yīng)的攔截器的方法.至于要攔截哪一個對象,則需通過后面的操作來體現(xiàn).
PersonIntercepter.java
- package cn.edu.hld;
- public class PersonIntercepter
- {
- public void method1()
- {
- System.out.println("method_1被執(zhí)行了!") ;
- }
- public void method2()
- {
- System.out.println("method_2被執(zhí)行了!") ;
- }
- }
JDK實現(xiàn)調(diào)用攔截器之四:
為了讓攔截器知道其要攔截的目標(biāo)對象,以及其應(yīng)執(zhí)行的方法,則應(yīng)該創(chuàng)建一個類,該類實現(xiàn)一個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實現(xiàn)調(diào)用攔截器之五:
為了根據(jù)目標(biāo)對象生成一個代理對象,還應(yīng)該創(chuàng)建一個代理工廠.
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實現(xiàn)調(diào)用攔截器之六:
主程序的實現(xiàn).
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實現(xiàn)調(diào)用攔截器之七:
直接在MyEclipse中運行.得到結(jié)果如下:
- method_1被執(zhí)行了!
- 我是thtwin
- method_2被執(zhí)行了!
- 我想跑得快一些!
JDK實現(xiàn)調(diào)用攔截器的基本框架和方法就介紹完了,那么現(xiàn)在你對JDK實現(xiàn)調(diào)用攔截器是不是有所了解了呢?
分享名稱:JDK實現(xiàn)調(diào)用攔截器淺析
地址分享:http://www.dlmjj.cn/article/dpseghc.html


咨詢
建站咨詢
