《Spring AOP入门——动态代理》
来源:互联网 发布:什么是元数据 编辑:程序博客网 时间:2024/06/15 01:06
Spring的动态代理有两种实现方式:JDK的动态代理;cglib的动态代理。
JDK的代理方式只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理。这就要使用cglib动态代理了。这里主要聊聊JDK的动态代理。
说到动态代理,就不得不说代理模式。
一:代理模式
使用代理模式必须要让代理类和目标类实现相同的接口,客户端通过代理类来调用目标方法,代理类会将所有的方法调用分派到目标对象上反射执行,还可以在分派过程中添加"前置通知"和后置处理(如在调用目标方法前校验权限,在调用完目标方法后打印日志等)等功能。
二:使用动态代理的四大步骤
1.通过实现InvocationHandler接口来自定义自己的InvocationHandler;
2.将被代理对象作为参数传递给自定义的InvocationHandler实例对象的构造参数
3.通过Proxy.newProxyInstance获得动态代理类
4.通过代理对象调用目标方法
三:实践
目的:通过动态代理实现AOP的横切加入日志操作
1·定义接口:UserMgr
package com.dynamic.aop.proxy;/** * 用户管理 接口 * @author 贾丽敏 * */public interface UserMgr {void addUser();void delUser();}
2·定义实现类
package com.dynamic.aop.proxy;public class UserMgrImpl implements UserMgr {public void addUser() {System.out.println("----添加用户--------");}public void delUser() {System.out.println("----删除用户--------");}}
3·自定义日志处理类并实现InvocationHandler接口:
package com.dynamic.aop.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * 日志操作处理 * @author 贾丽敏 * */public class LoggingHandler implements InvocationHandler {//被代理对象private Object target;public LoggingHandler(Object target){super();this.target=target;}public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("开始日志记录..........");Object object = method.invoke(target, args);System.out.println("结束日志记录..........");return object;}}
4·客户端:
public static void main(String[] args){UserMgr ug=new UserMgrImpl();//为用户管理添加日志记录操作LoggingHandler loghandler=new LoggingHandler(ug);//生成代理对象ClassLoader loader=UserMgr.class.getClassLoader();Class[] interfaces=new Class[]{UserMgr.class};//代理对象的类型,即其中有哪些方法UserMgr proxy = (UserMgr)Proxy.newProxyInstance(loader, interfaces, loghandler);proxy.addUser();System.out.println("----------------------分界线-------------");proxy.delUser();}执行结果:
阅读全文
0 0
- 《Spring AOP入门——动态代理》
- Spring AOP——Java动态代理
- Spring AOP基础—JDK动态代理
- Spring AOP 动态代理入门(一)
- spring-aop入门之动态代理模式
- aop入门:动态代理
- Spring Aop 动态代理
- Spring AOP动态代理
- Spring AOP 动态代理
- spring aop动态代理
- Spring(AOP动态代理)
- spring的AOP学习2——动态代理
- Spring 容器AOP的实现原理——动态代理
- Spring AOP原理——Java中的动态代理机制
- Spring 容器AOP的实现原理——动态代理
- Spring AOP的实现——动态代理机制
- Spring AOP——java的动态代理机制详解
- Spring 容器AOP的实现原理——动态代理
- python3/tensorflow1.2
- L1-027
- 面试题14—调整数组顺序使奇数位于偶数前面
- HTTPS抓包分析
- 5种方法解除开机密码
- 《Spring AOP入门——动态代理》
- jsp中自定义tag标签
- 'GridSearchCV' object has no attribute 'cv_results_' 这一问题的解决
- 四、单例模式
- 串口通信校验方式(even,odd,space,mark)UART数据波形分析
- Steamroller
- iOS优化 小知识
- Android的资源获取的相关方法
- Linux系列课程之二基础环境搭建