JavaSE8基礎 Proxy 對接口進行動態代理 簡單示例
阿新 • • 發佈:2017-10-08
implement over ner 會有 proxy str .get 方法 執行
禮悟:
好好學習多思考,尊師重道存感恩。葉見尋根三返一,活水清源藏於零。
虛懷若谷良心主,皓月當空自在王。願給最苦行無悔,誠勸且行且珍惜。
os :windows7 x64
jdk:jdk-8u131-windows-x64
ide:Eclipse Oxygen Release (4.7.0)
接口類:
package blog.jizuiku6; /** * * * @author jizuiku * @version V17.10.03 */ public interface UserDao { void play(); void sleep(); }
接口實現類:
package blog.jizuiku6; /** * * * @author jizuiku * @version V17.10.03 */ public class UserDaoImpl implements UserDao { @Override public void play() { // TODO Auto-generated method stub System.out.println("play"); } @Override public void sleep() { // TODO Auto-generated method stub System.out.println("sleep"); } }
關鍵的類出現:
package blog.jizuiku6; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * * * @author jizuiku * @version V17.10.03 */ public class MyInvocationHandler implements InvocationHandler { private Object target = null; // 取消 無參構造 private MyInvocationHandler() { // TODO Auto-generated constructor stub } public MyInvocationHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub // 準備部分 System.out.println("正在讀檔"); // 這行代碼相當於 // result = target.method(agrs); Object result = method.invoke(target, args); // 收尾部分 System.out.println("正在存檔"); return result; } }
測試類:
package blog.jizuiku6; import java.lang.reflect.Proxy; /** * * * @author jizuiku * @version V17.10.03 */ public class Demo { public static void main(String[] args) { UserDao ud = new UserDaoImpl(); MyInvocationHandler handler = new MyInvocationHandler(ud); ClassLoader loader = ud.getClass().getClassLoader(); Class[] interfaces = ud.getClass().getInterfaces(); // 對接口中的方法 UserDao proxy = (UserDao) Proxy.newProxyInstance(loader, interfaces, handler); // 執行所有的方法時,執行前會有附加操作,執行後也會有附加操作 // 有的時候 用到代理是: 執行前進行權限校驗,執行後進行日誌記錄 // 而這個程序,只是進行簡單的演示。不具備實用價值 // 如果要用在工作中的話,有成熟的框架可以使用。但萬變不離其宗,萬劍也要歸宗!Java proxy.play(); proxy.sleep(); proxy.hashCode(); } }
結果:
Java優秀,值得學習。
學習資源:itcast和itheima視頻庫。如果您有公開的資源,可以分享給我的話,用您的資源學習也可以。
博文是觀看視頻後,融入思考寫成的。博文好,是老師講得好。博文壞,是 給最苦 沒認真。
JavaSE8基礎 Proxy 對接口進行動態代理 簡單示例