动态代理
代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理、过滤、事后处理等服务,动态代理及通过反射机制动态实现代理机制。JDK 中的 java.lang.reflect.Proxy 类可以用来实现动态代理。
首先,准备一个简单的接口和实现类
/** * 接口 IHello.java */ public interface IHello { void hello(); }
/** * 实现类 Hello.java */ public class Hello implements IHello { @Override public void hello() { System.out.println("我是Hello."); } }
通过 Proxy 实现动态代理
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import org.junit.Test; public class HelloTest { @Test public void testProxy() throws Exception { final IHello hello = new Hello(); /* * proxyHello : 代理主题角色,代理类的实例 * IHello : 抽象主题角色,代理类和被代理类都需要实现的接口,JDK中的动态代理必须针对接口 * hello : 真实主题角色,被代理类的实例 */ IHello proxyHello = (IHello) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[] { IHello.class }, new InvocationHandler() { /* * proxy : 当前代理类的一个实例; 若调用proxy的非final方法,将造成无限循环调用 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 前期的业务逻辑操作 System.out.println("---开始"); // 调用被代理类的方法,传入参数args,得到返回 Object object = method.invoke(hello, args); // 后期的业务逻辑操作 System.out.println("---结束"); return object; } }); proxyHello.hello(); } }
返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 接口
, 代理
, java动态代理
, java 代理 jdk代理
, 动态
, 动态代理
, public
, pring 动态代理
, Hello
, jdk动态代理
, 代理类
, 反射和动态代理
java动态代理模式
jdk动态代理、jdk动态代理实现原理、jdk 动态代理详解、jdk 动态代理原理、jdk动态代理 cglib,以便于您获取更多的相关知识。