常见使用场景(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接口)