上篇博文讲是通过注解方式注入独立服务的,那这篇博文我们将通过配置文件的方式来切入我们的服务。
代码如下:
UserManager和UserManagerImpl (略,上篇博文)
服务类(独立于业务):
package com.huxj.spring; public class SecurityHandler { private void checkSecurity() { System.out.println("-------checkSecurity-------"); } }
applicationContext-beans.xml:
<bean id="userManager" class="com.huxj.spring.UserManagerImpl" />
<bean id="securityHandler" class="com.huxj.spring.SecurityHandler" />
<aop:config>
<aop:aspect id="securityAspect" ref="securityHandler">
<!-- 以add开头的方法 -->
<!-- <aop:pointcut id="addMethod" expression="execution(* add*(..))"/> -->
<!-- 以com.huxj.spring所有的add开头的方法 -->
<!-- <aop:pointcut id="addMethod" expression="execution(* com.huxj.spring.*.add*(..))"/> -->
<aop:pointcut id="addMethod" expression="execution(* com.huxj.spring.*.add*(..))//execution(* com.huxj.spring.*.del*(..)"/>
<aop:before method="checkSecurity" pointcut-ref="addMethod"/>
</aop:aspect>
</aop:config>
这种配置文件的方式,我们比较熟悉,因为在讲ioc容器使用的时候我们解除的比较多。只是这里的标签比较特殊一些。
其代码省略和上篇一致。
结果:
-------checkSecurity-------
---UserManagerImpl.addUser()----
总结:
在这里,我们采用的是配置文件的方式,核心也是通过动态代理切入到我们的程序中。
总之,AOP采用横向切入,它的实现思路是动态代理,它最大的好处就是大大提高代码的复用。