概述
java动态代理
package com.example.demo02proxy;
public class Cat implements Ainmal{
@Override
public void say() {
System.out.println("猫猫叫");
}
}
package com.example.demo02proxy;
public interface Ainmal {
public void say();
}
代理关键在于InvocationHandler 中的invoke方法,invoke中的三个个参数是将来调用者的参数proxy method args 原始类通过构造方法传递过来,在invoke中调用Object invoke = method.invoke(t, args)返回,前后可以写新功能
package com.example.demo02proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
**//代理关键在于InvocationHandler 中的invoke方法,invoke中的
//三个个参数是将来调用者的参数proxy method args 原始类通过
//构造方法传递过来,在invoke中调用Object invoke = //method.invoke(t, args)返回,前后可以写新功能**
public class Ihvokation implements InvocationHandler {
Object t;
public Ihvokation(Object t) {
this.t=t;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("代理前");
Object invoke = method.invoke(t, args);
System.out.println("代理后");
return invoke;
}
}
package com.example.demo02proxy;
import java.lang.reflect.Proxy;
public class ProxyTest {
public static void main(String[] args) {
ProxyTest proxyTest = new ProxyTest();
Ainmal cat = new Cat();
Ainmal dog= new Dog();
Ainmal getproxy =(Ainmal) proxyTest.Getproxy(dog);
getproxy.say();
}
public Object Getproxy(Object o){
Ihvokation tIhvokation = new Ihvokation(o);
Object o1 = Proxy.newProxyInstance(this.getClass().getClassLoader(), o.getClass().getInterfaces(), tIhvokation);
return o1;
}
}
最后
以上就是霸气小虾米为你收集整理的java动态代理,通用代理任何object的全部内容,希望文章能够帮你解决java动态代理,通用代理任何object所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复