目录
1. 步骤
2. 开始编写
2.1 导坐标
<!-- 使用aspectj框架aop编写-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.8</version>
</dependency>
2.2创建目标接口和目标类以及切面类
方法自定
2.3配置spring配置文件
首先我们需要创建aop命名空间,跟mvc命名空间创建方法相同,可以参考(1条消息) SSM框架学习7-SprigMVC数据响应_AAAristotle的博客-CSDN博客_ssm框架
这篇博文下mvc命名空间的创建。
然后代码如下:
-- 引入目标对象-->
<bean id="target" class="com.dzy.AOP.Target"/>
<!-- 引入切面对象-->
<bean id="Myaspect" class="com.dzy.AOP.MyAspect"/>
<!-- 配置织入,告诉spring框架,哪些方法(切点)需要进行哪些增强(前置、后置...)-->
<aop:config>
<!-- 声明切面-->
<aop:aspect ref="Myaspect">
<!-- 切面=切点+通知-->
<aop:before method="befor" pointcut="execution(public void com.dzy.AOP.Target.save())"/>
</aop:aspect>
</aop:config>
其中method的值可以是不同的方法名(切面类自定的),而增强方法的类型是在标签中定的:
这个类型就是前置增强,也就是在执行切点方法时先执行前置增强
pointcut就是切入点,后面的值是一个切点表达式,我们在后期通常切点表达式中代表的切入点有很多,每一个切入点都能在这得到前置增强,这样才能体现我们这种动态代理的强大 。
配置好后创建main自己跑一跑切点的方法,发现已经被加上了前置增强的效果。
3. 切点表达式
最常用的切点表达式是:
execution(* com.dzy.AOP.*.*(..))
返回值类型任意,aop包下任意类下任意方法任意参数。
4. 通知的类型
前置后置就不展示了,这里是arround的切面方法的编写:
joinpoint就是连接点,这里要加一个参数,环绕前环绕后通过这个proceed的生成前后来配置,总体格式可以记住上面这个格式。
异常抛出通知就是切面的方法可以在切点产生异常时执行,从而不继续执行切点方法,并且当这个切点还有其他增强方法时,在异常抛出通知生效后,后面的增强方法也一起停止。
但是最终通知不受异常抛出通知的影响,他依然会在最后执行。
5. 切点表达式的抽取
也就是当某一个切点表达式重复利用时,为了方便维护,我们可以将它抽取出来,重复引用,通过pointcut-ref来引用。