一、起源
OOP只能解决层次结构,各种散布在各处的无关的代码被称为横切(cross-cutting)代码,
在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用,于是诞生AOP。
AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关
系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本
相似。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
二、基本概念
1、join point(连接点):一个程序执行中的一个精确执行点
2、Point cut(切入点) :捕获一个连接点的结构
3、advice(通知):是point cut 的执行代码,是执行aspect的具体逻辑
4、aspect(切面):point out + advice
5、introduce(引入):为对象引入附加的方法和属性,从而达到修改对象结构的目的
三、Spring AOP 注解实现
1、Spring.XML文件配置
<!-- 开启spring的注解 -->
<context:annotation-config/>
<!-- springIOC自动去扫描某个包下的javabean -->
<context:component-scan base-package="com.wtu.spring.aop.annotation"/>
<!-- 可以理解为让@Before @After...@Around 生效 -->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
2、注解标记
@Aspect:一般使用在切面的类名上面,作用是指定该类为一个切面
编写切面类(把横切关注点的代码抽象到切面的类中):
一个一般的Java 类, 在其中添加要额外实现的功能,切面必须是 IOC 中的 bean
@PointCut: 配置在目标对象的方法上面,标识该方法是一个切入点
@Around @After @Before @After-returning @After-throwing :
execution(* UserDaoImpl.a*(..)):就是要告诉该方法要在哪个类哪个方法前/后/异常执行
例子:
切入点
@Before、@After、@Around参考
网友评论