首页 > 代码库 > Java动态代理
Java动态代理
首先我们定义一个接口
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
Java动态代理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。