spring aop概念以及jdk的动态代理商
AOP(Aspect-Oriented Programming),又称为面向切面编程。作为一种编程思想,AOP是 OOP(Object-Oriented Programing面向对象编程)一种 补充和完善。
AOP相关的术语
1.0 关注点
关注点就是所关注的与业务无关的公共服务或者系统级服务,如日志记录,权限检查,事务管理等。关注点通常称为横切关注点,表示要做什么。
2.0 连接点
连接点就是程序执行过程中明确的阶段点,如方法的调用或者异常的抛出等。其实,关注点的功能就是增加到相应的连接点。因而,连接点表示在那里做。在spring aop中,一个连接点总代表一个方法的执行。
3.0加强
加强就是在特定的连接点处所执行的解决逻辑,也就是面向连接点注入代码。加强通常有称为加强解决,表示具体做什么。
3.1.0 Before Advice 前置解决,在连接点执行前解决。
3.2.0 AfterReturning Advice后置加强,在连接点成功执行后调用。
3.3.0 AfterThrowing Advice,异常加强,在连接点抛出异常后被调用。
3.4.0 Around Advice 环境加强,在连接点执行前与执行后被调用。
4.0 切入点
切入点就是可以插入加强的连接点。
image.png
Jdk的动态代理商
AOP是基于代理商实现的,代理商分为2大类,静态代理商与动态代理商。静态代理商是在编译时候生成的,动态代理商是在运行的时候生成的。
下面看一个jdk的动态代理商的deom。
jdk动态代理商需要一个接口,以及其实现类。
定义接口 UserService
package dflx;public interface UserService { public void add(); public void serach(); }
以及其实现类UserImpl,和jdk动态代理商类MyJdkProxy
public class UserImpl implements UserService { @Override public void add() { System.out.println(" add user"); } @Override public void serach() { System.out.println("search user"); }}class MyJdkProxy implements InvocationHandler{ private UserService user; public MyJdkProxy(UserService user) { this.user=user; } public UserService createJDKProxy(){ return (UserService) Proxy.newProxyInstance(user.getClass().getClassLoader(),user.getClass().getInterfaces(),this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(method.getName().equals("add")) { System.out.println("记录日志"); return method.invoke(user, args); }else { return method.invoke(user, args); } } }
测试类 MyJdkTest 如下
package dflx;import org.junit.Test;public class MyJdkTest { @Test public void test() { //代理商对象 UserService user=new UserImpl(); //创立代理商 MyJdkProxy myJdkProxy=new MyJdkProxy(user); UserService proxy=myJdkProxy.createJDKProxy(); proxy.add(); //对add方法进行了加强 proxy.serach(); }}
对add方法,进行了加强。
结果如下
记录日志 add usersearch user
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » spring aop概念以及jdk的动态代理商
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » spring aop概念以及jdk的动态代理商