Spring AOP 的配置有四种方式:
1、纯pojo切面
配置如下:
<!-- 当定义一个纯POJO切面时,创建此Bean -->
<bean id="adviceBean" class="com.cvicse.steve.springframework.inaction.aop.AdviceBean"></bean>
<aop:config>
<aop:aspect ref="adviceBean" >
<aop:pointcut id="todo" expression="execution(* com.cvicse.steve.springframework.inaction.aop.service.AopServiceImpl.sayHello(..))"/>
<aop:before method="before" pointcut-ref="todo"/>
<aop:after-returning method="after" pointcut-ref="todo"/>
<aop:after-throwing method="afterThrowing" pointcut-ref="todo"/>
</aop:aspect>
</aop:config>
2、正则表达式切入点
<!-- 一个传统的AOP代理 -->
<bean id="target" class="com.cvicse.steve.springframework.inaction.aop.service.AopServiceImpl"></bean>
<!-- 一个实现了AOP AfterReturningAdvice、MethodBeforeAdvice接口的类 -->
<bean id="advice" class="com.cvicse.steve.springframework.inaction.aop.StartAfterAdvice"></bean>
<!-- 正则表达式切入点 -->
<bean id="jdkRegexpAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="advice"></property>
<property name="pattern" value=".*sayHello"></property>
</bean>
3、AspectJ切入点
<!-- AspectJ切入点 -->
<bean id="aspectjPointcut" class="org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor" >
<property name="advice" ref="advice"></property>
<property name="expression" value="execution(* *.sayHello(..))"></property>
</bean>
4、Proxy切入
<!-- Proxy切入点 -->
<bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="target"></property>
<property name="interceptorNames" value="jdkRegexpAdvisor" />
<property name="proxyInterfaces" value="com.cvicse.steve.springframework.inaction.aop.service.AopService"/>
</bean>
5、 自动代理
<!-- 创建自动代理,会自动检查通知者的切点是否匹配bean的方法,并且使用通知的代理来替换这个bean定义 -->
<bean
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />