动态代理详解(一)应用示例
2017-04-15 15:21
489 查看
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class MyInvocationHandler implements InvocationHandler{ // 目标对象 private Object target; /** * 构造方法 * @param target 目标对象 */ public MyInvocationHandler(Object target) { super(); this.target = target; } /** * 执行目标对象的方法 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 在目标对象的方法执行之前简单的打印一下 System.out.println("--------before-------"); // 执行目标对象的方法 Object result = method.invoke(target, args); // 在目标对象的方法执行之后简单的打印一下 System.out.println("--------after--------"); return result; } /** * 获取目标对象的代理对象 * @return 代理对象 */ public Object getProxy() { return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), target.getClass().getInterfaces(), this); } }
public interface UserService { /** * 目标方法 */ public abstract void add(); }
public class UserServiceImpl implements UserService{ public void add() { System.out.println("-------add------"); } }
import org.junit.Test; public class ProxyTest { @Test public void testProxy() throws Throwable { // 实例化目标对象 UserService userService = new UserServiceImpl(); // 实例化InvocationHandler MyInvocationHandler invocationHandler = new MyInvocationHandler(userService); // 根据目标对象生成代理对象 UserService proxy = (UserService) invocationHandler.getProxy(); // 调用代理对象的方法 proxy.add(); } }
运行结果:
------------------before------------------ --------------------add--------------- -------------------after------------------
相关文章推荐
- 详解Java动态代理的实现及应用
- Java动态代理的应用详解
- 关于.NET动态代理的介绍和应用简介
- Java动态代理示例代码
- MSSQL2000的官方JDBC在应用动态代理机制遇到的异常问题解决
- Java 动态代理示例
- SilverLight企业应用框架设计【四】实体层设计+为客户端动态生成服务代理(自己实现RiaService)
- TUXEDO 与 ORACLE 动态方法四的应用示例
- Castle 系列:Castle DynamicProxy动态生成透明代理类型详解
- MSSQL2000的官方JDBC在应用动态代理机制遇到的异常问题解决
- 动态建立弹出式菜单技术及其应用示例
- java 之 动态代理学习示例
- 设计模式之观察者与动态代理的结合应用
- 动态代理示例(根据博客园BillGan代码增加注释和辅助阅读类)
- 关于.NET动态代理的介绍和应用简介
- 用Annotation,Future,动态代理实现自己的JAVA方法运行超时应用
- 代理应用示例
- 关于.NET动态代理的介绍和应用
- 动态代理--详解
- Java动态代理二――CGLIB动态代理应用