1、配置Bean
<!-- 定义一个普通Bean实例,该Bean实例将被作为Aspect Bean --> <bean id="fourAdviceBean" class="org.crazyit.app.aspect.FourAdviceTest"/> <!-- 再定义一个普通Bean实例,该Bean实例将被作为Aspect Bean --> <bean id="secondAdviceBean" class="org.crazyit.app.aspect.SecondAdviceTest"/> <bean id="hello" class="org.crazyit.app.service.impl.HelloImpl"/> <bean id="world" class="org.crazyit.app.service.impl.WorldImpl"/>
2、配置AOP
<aop:config>
<!-- 将fourAdviceBean转换成切面Bean切面Bean的新名称为:fourAdviceAspect指定该切面的优先级为2 -->
<aop:aspect id="fourAdviceAspect" ref="fourAdviceBean" order="2">
<!-- 定义一个After增强处理,直接指定切入点表达式,以切面Bean中的release()方法作为增强处理方法 -->
<aop:after pointcut="execution(* org.crazyit.app.service.impl.*.*(..))" method="release"/>
<!-- 定义一个Before增强处理, 直接指定切入点表达式 以切面Bean中的authority()方法作为增强处理方法 -->
<aop:before pointcut="execution(* org.crazyit.app.service.impl.*.*(..))" method="authority"/>
<!-- 定义一个AfterReturning增强处理, 直接指定切入点表达式 以切面Bean中的log()方法作为增强处理方法 -->
<aop:after-returning pointcut="execution(* org.crazyit.app.service.impl.*.*(..))" method="log" returning="rvt"/>
<!-- 定义一个Around增强处理,直接指定切入点表达式 以切面Bean中的processTx()方法作为增强处理方法 -->
<aop:around pointcut="execution(* org.crazyit.app.service.impl.*.*(..))" method="processTx"/>
</aop:aspect>
<!-- 将secondAdviceBean转换成切面Bean 切面Bean的新名称为:secondAdviceAspect 指定该切面的优先级为1,该切面里的增强处理将被优先织入 -->
<aop:aspect id="secondAdviceAspect" ref="secondAdviceBean" order="1">
<!-- 定义一个Before增强处理,该参数必须为String类型(由authority方法声明中msg参数的类型决定) -->
<aop:before pointcut= "execution(* org.crazyit.app.service.impl.*.*(..)) and args(aa)" method="authority"/>
</aop:aspect>
</aop:config>
3、另:
<aop:pointcut.../>元素可以用来定义切入点,<aop:pointcut id="xxx_id" expression="execution(* org.crazyit.app.service.impl.*.*(..))" />
若作为作为<aop:aspect.../>子元素则只对该切面有效
<aop:config.../>的子元素,可以被多个切面通过共享,则
<aop:after pointcut="execution(* org.crazyit.app.service.impl.*.*(..))" method="release"/>
可改为:
<aop:after pointcut-ref="xxx_id" method="release"/>