AOP的使用场景:
1)AOP日志保存到数据库
2)AOP做权限验证
3)AOP做安全检查
4)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: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/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<!-- 基于注解的AOP步骤:
1.将目标类和切面类加入到ioc容器
2.告诉Spring哪个是切面类@Aspect
3.在切面类中使用五个通知注解
4.开启基于注解的aop功能
-->
<!-- 基于配置的AOP步骤
注解,快速方便
配置,功能完善
重要的用配置,不重要的用注解
-->
<bean id="mycalc" class="com.lyj.impl.MyCalc"></bean>
<bean id="va" class="com.lyj.utils.ValidateAspect"></bean>
<bean id="lu" class="com.lyj.utils.LogUtils"></bean>
<!-- 需要aop名称空间 -->
<aop:config>
<aop:pointcut expression="execution(* com.lyj.impl.*.*(..))" id="globalPoint"/>
<!-- 指定切面 -->
<aop:aspect ref="lu">
<!-- 前置通知 logStart -->
<aop:pointcut expression="execution(* com.lyj.impl.*.*(..))" id="mypoint"/>
<aop:around method="myAround" pointcut-ref="mypoint"/>
<aop:before method="logStart" pointcut="execution(* com.lyj.impl.*.*(..))"/>
<aop:after-returning method="logReturn" pointcut-ref="mypoint" returning="result"/>
<aop:after-throwing method="logException" pointcut-ref="mypoint" throwing="exception"/>
<aop:after method="logEnd" pointcut-ref="mypoint"/>
</aop:aspect>
<aop:aspect ref="va">
<aop:before method="logStart" pointcut-ref="globalPoint"/>
<aop:after-returning method="logReturn" pointcut-ref="globalPoint" returning="result"/>
<aop:after-throwing method="logException" pointcut-ref="globalPoint" throwing="exception"/>
<aop:after method="logEnd" pointcut-ref="globalPoint"/>
</aop:aspect>
<!-- 在切面类中使用五个通知注解 -->
</aop:config>
</beans>