Spring AOP
1.什么是AOP?
AOP是一种面向切面的编程思想,是OOP的一种扩展和补充;和OOP(面向对象)相比,是一种动态过程;
AOP,它能够在预编译阶段和运行期动态代理的方式,完成在不修改代码的情况下给程序添加额外的功能。
AOP常被用在非核心业务的扩展上,提高系统的可扩展性。例如日志管理,权限管理,事务处理,缓存等。
2.CGLIB(默认),JDK
AOP的底层是基于动态代理实现的
(1)如果被代理对象实现的是接口,就可以使用JDK动态代理机制对目标创建代理对象(代理对象和被代理对象实现同一个接口)
(2)如果被代理对象没有实现接口,就可以使用CGLIB代理机制创建代理对象(代理对象implemens被代理对象)
(3)使用JDK时需要配置文件中:spring.aop.proxy-target-class=false
3.AOP相关术语
(1)Aspect:定义一个切面类,被此注解描述的类是一个Spring AOP的一个切面类
(2)PointCut:定义一个切入点方法;只能存在Aspect中;属性值是切入点的切入点表达式,有多种;切入点是连接点的集合;
(3)Joinpoit:程序执行中的连接点,一般指向被拦截到的目标方法
(4)Advice:定义一个通知,及切入点要执行的方法;其属性值是切入点表达式
4.切入点表达式
4.1 bean:用于匹配bean对象的所有方法
bean表达式一般用于类级别,实现粗粒度的切入比如:
bean(userServiceImpl) 指定userServiceImpl中的所有方法
bean(*ServiceImpl) 指定以ServiceImpl结尾的所有类的所有方法
4.2 annotation:
@annotation是方法级别的细粒度切入方法,比如:
("@annotation(com.com.py.pj.common.annotation.SysLogRequired)")
其中com.com.py.pj.common.annotation是创建注解的包;SysLogRequired是注解名
使用此接入点表达式时,需要把自定义的注解写在业务方法上。
5.需要的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
6.代码实现
参考
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。