AOP是什么? 可以理解为为对象赋值
为什么要用AOP ?
怎么使用AOP?
面向切面编程,就是将交叉业务洛基封装成切面,利用AOP的功能将切面组织到主业务逻辑中,所谓的交叉业务逻辑是值,通用的,与主业务逻辑无关的代码,如安全检查,事务,日志等
若不使用AOP,则会出现代码纠缠,即代码业务逻辑与主业务逻辑混合在一起,这样回事主业务逻辑变得混杂不清
AOP基本术语:
切面
切面泛指交叉业务逻辑,比如事务处理日志处理就可以理解为切面。常用的切面有通知,顾问。实际就是对主业务逻辑到的一种增强
织入:
织入是指将切面代码插入到目标对象的过程
连接点:
连接点指切面可以织入的位置
切入点:
指的是切面具体织入的位置
通知(Advice)
通知是切面的一种实现,可以完成简单织入功能(织入功能就是在这里完成的)。 通知定义了增强代码切入到目标代码的时间点,是目标方法执行之前执行,还是之 后执行等。通知类型不同,切入时间不同。
顾问(Advisor)
顾问是切面的另一种实现,能够将通知以更为复杂的方式织入到目标对象中,是将 通知包装为更复杂切面的装配器。 不仅指定了切入时间点,还可以指定具体的切入 点
Spring对AOP的实现(基于Schema-based方式)
常用通知分类
前置通知(MethodBeforeAdvice)
后置通知(AfterReturningAdvice)
环绕通知(MethodInterceptor)
异常处理通知(ThrowsAdvice)
AspectJ对AOP的实现 :
对于AOP这种编程思想,很多框架都进行了实现。Spring就是其中之一,可以完成面向切面编程。同样,AspectJ也实现了AOP的功能,且其实现方式更为简捷, 使用更为方便,而且还支持注解式开发。所以,Spring又将AspectJ的对于AOP的实 现也引入到了自己的框架中。 在Spring中使用AOP开发时。
一般使用AspectJ的实现方式。
注解的形式:
AspectJ中常用的通知有五种类型:
大前提:先导入两个jar包
引入AOP约束
<?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: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/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
前置通知 @Before
后置通知@AfterReturning
环绕通知 @Around
异常通知 @AfterThrowing
最终通知:@After
无论程序执行是否正常,该通知都会执行。类似于 try..catch中finally代码块。
XML的方式:
method 方法名 pointcut-ref 目标对象
前置通知 <aop:before method="qname" pointcut-ref="some"/>
后置通知 <aop:after-returning method="hname" pointcut-ref="dosome" returning="target"/>
环绕通知 <aop:around method="hrname" pointcut-ref="dosome"/>
异常通知:<aop:after-throwing method="ycname" pointcut-ref="dosome" throwing="ex"/>
最终通知:<aop:after method="zzname" pointcut-ref="dosome" />