标签:one row static ide rgs tproxy -- tin ant
首先我们定义一个接口
public interface SayService { public void say(); }
接着实现这个接口
public class SayImpl implements SayService { @Override public void say() { System.out.println("I want to go shoping."); } }
定义一个动态代理类了,每一个动态代理类都必须要实现 InvocationHandler 这个接口
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DynamicProxy implements InvocationHandler { //我们要代理的真实对象 private Object object; public DynamicProxy(Object object) { this.object = object; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before go shoping"); //当代理对象调用真实对象的方法时,其会自动跳转到代理对象关联的handler对象的invoke方法进行调用 method.invoke(object, args); System.out.println("after go shoping"); return null; } }
定义测试方法
public class TestProxy { public static void main(String[] args) { //要代理的对象 SayService sayImpl = new SayImpl(); //要代理哪个对象,就要将改对象传进去,最后是通过其真实对象来调用方法的 InvocationHandler handler = new DynamicProxy(sayImpl); //Proxy.newProxyInstance--创建代理对象 //handler.getClass().getClassLoader()---加载代理对象 //sayImpl.getClass().getInterfaces()--为代理对象提供的接口是真实对象所实现的接口,表示我们要代理的是改真实对象,这样我们就能调用接口中的方法 //handler-关联上的InvocationHandler这个对象 SayService sayService = (SayService)Proxy.newProxyInstance(handler.getClass().getClassLoader() ,sayImpl.getClass().getInterfaces(), handler); sayService.say(); } }
控制台打印的日志
before go shoping
I want to go shoping.
after go shoping
标签:one row static ide rgs tproxy -- tin ant
原文地址:http://www.cnblogs.com/ts-sd/p/7351183.html