Java Proxy动态代理

常见使用场景(Spring AOP)

简单例子

包结构

Java Proxy动态代理_第1张图片

User类

Java Proxy动态代理_第2张图片

UserService接口

Java Proxy动态代理_第3张图片

UserService接口实现类

Java Proxy动态代理_第4张图片

我的动态代理类(实现InvocationHandler接口)
Java Proxy动态代理_第5张图片

测试使用动态代理的类

Java Proxy动态代理_第6张图片

测试我的动态代理运行结果
Java Proxy动态代理_第7张图片
解释
我们的动态代理类实现了InvocationHandler接口

重写invoke方法
Java Proxy动态代理_第8张图片
使用示范
Java Proxy动态代理_第9张图片


在原有接口方法被调用方法执行的基础之上,在执行原有方法前加入了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接口)

你可能感兴趣的:(Proxy,动态代理,Spring,AOP,Java,Spring,学习笔记)