1. 快速入门
(1)导入AOP 相关坐标
(2)创建目标接口和目标类(内部有切点)
(3)创建切面类(内部有增强方法)
(4)将目标类和切面类的对象创建权交给Spring
(5)在applicationContext 中配置置入关系
(6)测试代码
(1)导入AOP 相关坐标
<!--导入spring的context坐标,context依赖aop--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.5.RELEASE</version> </dependency> <!-- aspectj的织入 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.13</version> </dependency>
(4)将目标类和切面类的对象创建权交给Spring
<!--目标对象--> <bean id="target" class="com.it.aop.Target"></bean> <!--切面对象--> <bean id="myAspect" class="com.it.aop.MyAspect"></bean>
(5)在applicationContext 中配置织入关系
<!--配置织入--> <aop:config> <!--声明切面--> <aop:aspect ref="myAspect"> <!--切面 = 切点 + 通知--> <aop:before method="before" pointcut="execution(public void com.it.aop.Target.save())"></aop:before> </aop:aspect> </aop:config>
2. XML 配置AOP 详解
(1)切点表达式的写法
表达式语法:execution([ 修饰符 ] 返回值类型 包名.类名.方法名(参数))
访问修饰符可以省略
返回值类型、包名、类名、方法名可以使用星号* 代表任意
包名与类名之间一个点 . 代表当前包下的类,两个点 .. 表示当前包及其子包下的类
参数列表可以使用两个点 .. 表示任意个数,任意类型的参数列表
例如:
execution(public void com.itheima.aop.Target.method())
execution(void com.itheima.aop.Target.*(..))
execution(* com.itheima.aop.*.*(..))
execution(* com.itheima.aop..*.*(..))
execution(* *..*.*(..))
(2)通知的种类
通知的配置语法:
<aop:通知类型 method="切面类中的方法名" pointcut="切点表达式"></aop:通知类型>
(3)切点表达式的抽取
当多个增强的切点表达式相同时,可以将切点表达式进行抽取,在增强中使用pointcut-ref 属性代替pointcut 属性来引用抽取后的切点表达式。
<aop:config> <!--引用myAspect的Bean为切面对象--> <aop:aspect ref="myAspect"> <aop:pointcut id="myPointcut" expression="execution(* com.it.aop.*.*(..))"/> <aop:before method="before" pointcut-ref="myPointcut"></aop:before> </aop:aspect> </aop:config>