阅读目录
- 既可以在目标方法之前织入增强动作,也可以在执行目标方法之后织入增强动作;
- 它可以决定目标方法在什么时候执行,如何执行,甚至可以完全阻止目标目标方法的执行;
- 它可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值;
- 当需要改变目标方法的返回值时,只能使用Around方法;
虽然Around功能强大,但通常需要在线程安全的环境下使用。因此,如果使用普通的Before、AfterReturing增强方法就可以解决的事情,就没有必要使用Around增强处理了。
二、定义切面类、连接点注解类
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143349160-1239619844.png)
PointCut连接点注解类
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143349613-555204206.png)
说明:
这是一个注解类型:@interface
类中设置了一个methodName属性;
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143351629-81021347.png)
定义切面类
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143351629-81021347.png)
说明:
- @Around定义了此方法为 Around增强处理方法;
- @annotation(around):参数around应该与增强处理方法中的参数名保持一致,该声明指定了pointcut连接点,也可以使用其他方式,如:
pointcut="execution(* org.crazyit.app.service.impl.*.*(..))";
- point.proceed()调用了目标方法,并获取其返回值;
三、为待增强的方法--添加注解声明
在上面定义@Around增强时,通过@annotation() 方式指定了pointcut,其中方法参数为连接点注解类aroundAuthority,
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143352113-1847602608.png)
如果需要对某一方法进行增强,只需要在相应的方法上添加上此注解即可,如下:
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143352582-926957670.png)
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143353004-513274031.png)
四、AspectJ配置文件
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143353676-1578403486.png)
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143354082-1220419107.png)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 启动@AspectJ支持 -->
<aop:aspectj-autoproxy />
<context:component-scan base-package="com.sssppp.Spring.aop">
</context:component-scan>
</beans>
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143355363-1762163164.png)
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143355926-1721903993.png)
![](https://images2015.cnblogs.com/blog/731047/201609/731047-20160906143356566-1537548301.png)
《@AfterReturning增强处理简单示例》http://www.cnblogs.com/ssslinppp/p/4633496.html
《@After后向增强处理简单示例》http://www.cnblogs.com/ssslinppp/p/4633427.html
《@Before前向增强处理简单示例》 http://www.cnblogs.com/ssslinppp/default.html?page=7
转载请标明出处:http://www.cnblogs.com/ssslinppp/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步