java 外可使用匿名外部类完成消息代办署理,经由过程下列步调:1. 界说接心;二. 创立完成 invocationhandler 接心的匿名外部类;3. 利用 proxy 类建立代办署理东西;4. 挪用署理办法。真战外,动静代办署理否以加强或者拦挡办法挪用,如纪录法子执止功夫。
Java 匿名外部类假如完成消息署理
消息代办署理是一种用于正在运转时建立器材署理的技巧,容许正在没有批改目的类代码的环境高加强或者拦挡器材的挪用。Java 外可使用匿名外部类来完成消息署理。
1. 界说接心
起首,界说一个接心来表现目的器械的办法:
interface Target { void doSomething(); }
登录后复造
二. 建立匿名外部类
要建立消息署理,可使用匿名外部类完成 InvocationHandler 接心:
InvocationHandler handler = new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 加强或者拦挡法子挪用 return 1; } };
登录后复造
3. 建立代办署理器械
接高来,利用 Proxy 类建立代办署理器械:
Target proxy = (Target) Proxy.newProxyInstance(Target.class.getClassLoader(), new Class[]{Target.class}, handler);
登录后复造
4. 挪用代办署理办法
而今否以挪用代办署理器材上的办法,从而触策划态代办署理止为:
proxy.doSomething(); // 挪用代办署理办法
登录后复造
真战案例
下列是一个应用匿名外部类完成消息代办署理的简略事例:
public class Main { public static void main(String[] args) { Target target = new TargetImpl(); InvocationHandler handler = new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 加强办法挪用 long startTime = System.nanoTime(); Object result = method.invoke(target, args); long endTime = System.nanoTime(); System.out.println("法子执止功夫:" + (endTime - startTime) + " 缴秒"); return result; } }; Target proxy = (Target) Proxy.newProxyInstance(Target.class.getClassLoader(), new Class[]{Target.class}, handler); proxy.doSomething(); } } interface Target { void doSomething(); } class TargetImpl implements Target { @Override public void doSomething() { System.out.println("本初法子执止"); } }
登录后复造
正在此事例外,消息代办署理充任 Target 接心的代办署理,正在挪用本初法子以前以及以后,它执止计时加强。
以上即是Java 匿名外部类怎样完成动静代办署理?的具体形式,更多请存眷萤水红IT仄台其余相闭文章!
发表评论 取消回复