动态代理

package Agency;

public interface ITest {
void test1();
void test2();
}
package Agency;

public class TestDemoIMpl implements ITest{
@Override
public void test1() {
System.out.println(“执行test1”);
}

@Override
public void test2() {
    System.out.println("执行test2");

}

}
package Agency;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class ProxDemo implements InvocationHandler {
/**
*动态代理类
*/
Object obj;//被代理的对象
public ProxDemo(Object obj){
this.obj=obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName()+“开始执行”);
Object result=method.invoke(this.obj,args);//执行的是指定代理对象的指定的方法
System.out.println(method.getName()+“执行完毕”);
return result;
}
}

package Agency;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class Test {
public static void main(String[] args) {
TestDemoIMpl test = new TestDemoIMpl();
/**
注意:如果一个对象想要通过Proxy.newProxyInstance方法被代理,
* 那么这个对象的类一定要有相应的接口
* 就行本类中的TestDemoIMpl实现类和 ITest接口
/
test.test1();
test.test2();
System.out.println("-------------------------------------------------");
/
需求:
在执行test1和test2方法时需要加入一些东西
在执行方法前打印test1或test2开始执行
在执行方法后打印test1或test2执行完毕
打印的方法名要和当时调用方法保存一致
*
*/
InvocationHandler handler = new ProxDemo(test);
/**handler.getClass().getClassLoader()
*参数1是代理对象的类加载器
*参数2是被代理的对象的接口
* 参数3是代理对象
* 返回的值就成功被代理后对象 返回的是object类型,需要根据当时的情况去转换类型
* 将接口传递给代理
*/
ITest t= (ITest) Proxy.newProxyInstance(handler.getClass().getClassLoader(),test.getClass().getInterfaces(),handler);
t.test1();
t.test2();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值