new ace int getclass sys tcl ride get 动态代理
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- //动态代理的使用
- interface Subject {
- void action();
- }
- // 被代理类
- class RealSubject implements Subject {
- @Override
- public void action() {
- System.out.println("我是被代理类,我一定要被执行!");
- }
- }
- // 代理类
- class MyInvocationHandler implements InvocationHandler {
- Object object; // 实现了接口的被代理类的对象的声明
- // ①给被代理的对象实例化②返回一个代理类的对象
- public Object blind(Object obj) {
- this.object = obj;
- return Proxy.newProxyInstance(object.getClass().getClassLoader(),
- object.getClass().getInterfaces(), this);
- }
- //当通过代理类的对象发起对重写的方法的调用时,都会转为对如下的invoke方法的调用
- @Override
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable {
- //method方法的返回值是returnVal
- Object returnVal = method.invoke(object, args);
- return returnVal;
- }
- }
- public class TestProxy {
- public static void main(String[] args) {
- //1.被代理的对象
- RealSubject real = new RealSubject();
- //2.创建一个实现了InvocationHandler接口类的对象
- MyInvocationHandler handler =new MyInvocationHandler();
- //3.调用blind()方法,动态的返回一个同样实现了real所在类实现的接口Subject的代理类的对象
- Object obj = handler.blind(real);
- Subject sub = (Subject)obj; //此时sub就是代理类的对象
- sub.action();//转到对InvacationHandler接口的实现类的invoke()方法的调用
- }
- }
java动态代理
new ace int getclass sys tcl ride get 动态代理
原文:http://www.cnblogs.com/wxf-com/p/7898482.html
来源: http://www.bubuko.com/infodetail-2407514.html