spring中的AOP
连接点,被拦截到的点,在spring中指的是方法
切入点,被增强的连接点
通知 在调用方法前的是前置通知,在后面的是后置通知,在catch中的是异常通知,在final中的是最终通知,整个invoke方法就是环绕通知
Target 被代理的对象
proxy 代理对象
织入 把被代理对象增强的过程
切面 通知+切入点
spring中的AOP要明确的事情
编写核心代码,抽取公共代码制作为通知,在配置文件中声明切入点和通知之间的关系
spring中AOP的配置
XML配置AOP
aop:config 表明aop配置开始,
aop:aspect 切面配置开始 id是切面的名字,ref是通知类bean
aop:before 前置通知 method用于指定中的方法 pointcut是切入点
1 | <bean id='logger' class="com.wsx.utils.logger"></bean> |
通配写法
访问修饰符可以省略 如public
返回值可以是通配符,表示任意返回值
包名可以是通配符表示任意包,几个包就有几个*, 可以用..*表示当前包的所有子包
方法可以用*
参数可以用通配符,或者类型名
* *..**.*(..)
1 | <bean id='logger' class="com.wsx.utils.logger"></bean> |
实际开发怎么写呢
* com.wsx.wsx.wsx.*.*(..)
各种通知都加进来
1 | <bean id='logger' class="com.wsx.utils.logger"></bean> |
配置切点
减少代码量,写在aop:aspect外可以所有切面都可以使用(写在aspect之前),写在aop:aspect内只在内部有用
1 | <bean id='logger' class="com.wsx.utils.logger"></bean> |
配置环绕通知
当我们配置了环绕通知以后,spring就不自动帮我们调用被代理对象了
1 | <aop:around method="?" pointcut-ref="pt1"></aop:around> |
1 | public Object arroundPringLog(ProceedingJoinPoint pjp){ |
注解配置AOP
开启注解
1 | <aop:aspectj-autoproxy></aop:aspectj-autoproxy> |
@Aspect
表明当前类是一个切面类
@Pointcut
切入点表达式
1 |
|
@Before
表明当前方法是一个前置通知, AfterReturning、AfterThrowing、After、Arount同理
1 |
|
注解调用顺序的问题
前置、最终、后置/异常
纯注解
加在类的前面即可
1 |
- 本文作者: fightinggg
- 本文链接: http://fightinggg.github.io/yilia/yilia/Q8BOQD.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!