Java Proxy动态代理

常见使用场景(Spring AOP)

简单例子

包结构

User类

UserService接口

UserService接口实现类

我的动态代理类(实现InvocationHandler接口)

测试使用动态代理的类

测试我的动态代理运行结果

解释
我们的动态代理类实现了InvocationHandler接口

重写invoke方法

使用示范


在原有接口方法被调用方法执行的基础之上,在执行原有方法前加入了beforeSave()方法(自己写的),
在执行之后调用了finishSave()方法,在调用原来接口中方法的基础之上调用了其他方法,实现我们所需的功能,

比如计算该方法执行所需时间可以在方法前后获取时间计算差值、日志记录
避免了使用代码去入侵原来封装好的对象,实现了我们要做的事情并且没有污染模块的源码

关键代码解释:
 

UserService proxy=(UserService)Proxy.newProxyInstance(userService.getClass().getClassLoader(),new Class[]{UserService.class},userServiceProxy);

调用Proxy的newProxyInstance实例化一个新的动态代理对象

参数解释
userService.getClass().getClassLoader() 被代理对象的classLoader
new Class[]{UserService.class}被代理的所有方法的接口数组(UserService是一个接口)
userServiceProxy我的动态代理(实现了InvocationHandler接口)

posted @ 2019-02-18 14:34  HumorChen99  阅读(2)  评论(0编辑  收藏  举报  来源