学习Spring之九:AOP in Spring

Spring IoC和 Spring AOP组合,一起形成了Spring,这样一个有机整体,使得构建轻量级的J2EE架构成为可能,而且事实证明,非常有效。没有Spring IoC的Spring AOP是不完善的,没有Spring AOP的Spring IoC是不健壮的。 本文研究Spring框架中的面向方面编程(Aspect-Oriented Programming,AOP),进而通过例子解析如何运用Spring中的所有通知类型和切入点来实现更实用的方面和面向方面设计模式。

AOP概念:
Advice:如何将before通知、afterReturning通知和afterThrowing通知声明为bean。
  Pointcut:如何声明静态切入点逻辑以将XML Spring Bean Configuration文件中的所有内容联系在一起。
  Advisor:关联切入点定义与通知bean的方式。

Spring AOP是使用代理来完成的,Spring 两种方式:JDK动态代理,需要设定一组代理接口;CGLIB 代理,可代理接口和类。Spring提供了5种Advice类型:Interception Around、Before、After Returning、Throw和Introduction。它们分别在以下情况下被调用:在JointPoint前后、JointPoint前、 JointPoint后、JointPoint抛出异常时、JointPoint调用完毕后。

配置文件:

1 <beans>
2 <bean id="myAOPProxy"
class="org.springframework.aop.framework.ProxyFactoryBean">
3 <property name="proxyInterfaces">
4 <value>ITest</value>
5 </property>
6 <property name="target">
7 <ref local = "test"/>
8 </property>
9 <property name="interceptorNames">
10 <value>myPotincutAdvisor</value>
11 </property>
12 </bean>
13
14 <bean id="test" class="Test"/>
15
16 <bean id="MyInterceptor" class="MethodTimeCostInterceptor"/>
17
18 <bean id="myPotincutAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
19 <property name="advice">
20 <ref local="MyInterceptor"/>
21 </property>
22 <property name="patterns">
23 <list>
24 <value>.*</value>
25 <value>.*</value>
26 </list>
27 </property>
28 </bean>
29 </beans>



分析代码:
1、<bean id="myAOPProxy"
class="org.springframework.aop.framework.ProxyFactoryBean">声明注入了代理实例myAOPProxy。
2、 proxyInterfaces声明将被代理接口ITest。
3、 target声明被代理目的类。
4、 interceptorNames设置拦截器为myPotincutAdvisor。
5、 patterns为拦截器设置配匹方式,即在所被配匹成功的方法被调用时执行拦截器内容。

该配置文件,指定要加载一个接口与ITest相匹配的bean。该bean随后被关联到Test实现类。看起来好像是费了很大力气只为了加载一个简单的bean并调用一个方法,但是这个配置文件只是使 Spring框架可以透明地对应用程序应用其组件的众多特性的一个体现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值