AOP (Aspect Oriented Programming) :面向切面编程
------- 在原有的纵向执行流程中添加横切面
面向切面编程: 就是在程序原有的纵向执行流程中,针对某一个或一些方法添加通知,形成横向切面。
Spring 有两种实现AOP的方式:1.Schema-based 2.AspectJ
第一种方式需要实现其类与接口,而第二种不需要。两者配置都在<aop:config>标签中实现。
Schema-based
一、前置通知、后置通知、异常通知。
1.首先需要导入jar包
aopalliance.jar
aspectjweaver.jar
commons-logging-1.1.3.jar
spring-aop-4.1.6.RELEASE.jar
spring-aspects-4.1.6.RELEASE.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-core-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
spring-tx-4.1.6.RELEASE.jar
2.创建测试类以及相应的通知类
测试类
前置通知
后置通知
异常通知 --- 异常通知需要自己实现afterThrowing方法,方法名必须为afterThrowing
3. 配置applicationContext.xml文件
<!-- 前置通知 后置通知 异常通知 配置 -->
<bean id="mybefore" class="com.yyl.advisor.MyBefore"></bean> // 前置通知
<bean id="myafter" class="com.yyl.advisor.MyAfter"></bean> // 后置通知
<bean id="demo" class="com.yyl.test.Test"></bean> // 测试类
<bean id="throw" class="com.yyl.advisor.MyThrows"></bean> // 异常通知
<aop:config>
<aop:pointcut expression="execution(* com.yyl.test.Test.test1())" id="mypoint"/> // 设置切点
<aop:advisor advice-ref="mybefore" pointcut-ref="mypoint"/> // 设置前置通知
<aop:advisor advice-ref="myafter" pointcut-ref="mypoint"/> // 设置后置通知
<aop:advisor advice-ref="throw" pointcut-ref="mypoint"/> // 设置异常通知
</aop:config>
AspectJ
1.导入jar包
2.创建相应测试类以及advisor类
------- 注意 这时候类以及方法名可以自由写且不需要实现任何接口
3.相应applicationContext配置
<!-- 异常通知的Aspectj方式 实现 -->
<bean id="mythrow" class="com.yyl.advis.MyAdvisor"></bean>
<bean id="demo" class="com.yyl.test.Test"></bean>
<aop:config>
<aop:aspect ref="mythrow"> // 设置切点
<aop:pointcut expression="execution(* com.yyl.test.Test.test1())" id="mypoint"/>
<aop:after-throwing method="throwsEx" pointcut-ref="mypoint"/>
</aop:aspect> //设置异常通知
</aop:config>