您好,登錄后才能下訂單哦!
利用JDK怎么調(diào)用攔截器,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
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)核心的攔截器類當某個方法被JDK調(diào)用之前或之后執(zhí)行相應的攔截器的方法.至于要攔截哪一個對象,則需通過后面的操作來體現(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)用攔截器之四:
為了讓攔截器知道其要攔截的目標對象,以及其應執(zhí)行的方法,則應該創(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ù)目標對象生成一個代理對象,還應該創(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í)行了! 我想跑得快一些!
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。