动态代理
来源:互联网 发布:淘宝上的知名甜品店 编辑:程序博客网 时间:2024/06/16 14:09
*只能针对接口做代理
1.概念
自己不想干的事委托别人来干
2. 场景
在业务接口实现类中做权限校验和日志记录
3. 代码实现
业务接口
public interface UserService {void add();void delete();}实现类
public class UserServiceImpl implements UserService{@Overridepublic void add() {System.out.println("增");}@Overridepublic void delete() {System.out.println("删");}}如果在实现类的每个方法里面都去添加权限校验和日志记录操作的话太过于麻烦,现在针对业务接口做代理使用Proxy类
代码优化
1.代理类实现InvocationHandler接口
public class MyInvocationHandler implements InvocationHandler {// 传入被代理对象private Object target;public MyInvocationHandler(Object target){this.target = target;}@Override// 参数分别为代理对象,通过反射获取的方法,方法的参数列表public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("权限校验");method.invoke(target, args); // 执行被代理对象的方法 System.out.println("日志记录");return null;}}
2.生成代理对象
private static void dynamicProxy() {// 被代理类UserServiceImpl serviceImpl = new UserServiceImpl();MyInvocationHandler m = new MyInvocationHandler(serviceImpl);// 生成代理对象UserService newProxyInstance = (UserService) Proxy.newProxyInstance(serviceImpl.getClass().getClassLoader(), serviceImpl.getClass().getInterfaces(), m);newProxyInstance.add();newProxyInstance.delete();}
3.结果
权限校验增日志记录权限校验删日志记录
阅读全文
0 0
- 代理-->静态代理&动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- java方法的可变参数用法
- Log4J组件使用
- JVM内存管理机制
- 一、shiro入门知识笔记
- 第二阶段-tensorflow程序图文详解(一)Estimators
- 动态代理
- 如何定制化序列化过程
- python函数知识点整理
- 学习笔记1
- 给初学者的RxJava2.0教程(三)
- lua table.remove的小细节
- java删除文件失败
- 搭建Git服务器/Centos服务器git升级/git上传服务器自动同步
- CVE-2017-17562 GoAhea远程代码执行反弹shell姿势