这一章内容比较简单,就是大致的了解一下Spring的AOP框架里的5种Advice:
1、Interception Around(实现MethodInterceptor接口)
2、Before
3、After Returning
4、Throw
5、Introduction
第一个Interception Around通知我们前面一章已经介绍过了,就是实现了
org.aopalliance.intercept.MethodInterceptor这个接口的GiftBySpring类,它的作用就是用代理模式来代理一个目标实例,然后就可以在这个实例的方法前后嵌入自己想要额外增加的功能,比如get/giveGift功能,它的特点就是全面代理了目标实例。
而第二、第三个Before和After Returning这两种通知就有所区别了。看直译就是“前”、“后”的意思,这就代表了这两种通知分别只在目标实例的方法(也就是JoinPoint)
“执行前”、“执行后”才嵌入执行额外功能。可以这样理解:Before和After Returning两种通知其实就是把Interception Around这种通知拆分成了前后两个部分。
第四种Throw通知,就是在被代理的目标Bean(JoinPoint)抛出异常的时候执行Advice
第五种Introduction通知,就是在JoinPoint执行完毕以后再执行Advice,这种通知经常会与After Returning通知相混淆,等会再详细解释它们的区别
因此这5种通知的区别就在于
何时执行额外增加的功能(也就是Advice)!
5种Advice的实现方法其实大同小异,这里为了跟前一篇的Interception Around类型Advice有所区分,所以就再做一个用Before和After Returning的组合来实现相同的get/give礼物的功能。
为了节约篇幅,这里就省略掉跟前面一章相同的ISpeaker接口和Robot类的代码了。
那么我们接下来就是新建一个Before类型的Advice来实现getGift功能:
package com.iteye.bolide74.action;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class GetGift implements MethodBeforeAdvice {
@Override
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
System.out.println("通过MethodBeforeAdvice接口获取了一个礼物!");
}
}
然后是用After Returning来实现giveGift功能:
package com.iteye.bolide74.action;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
public class GiveGift implements AfterReturningAdvice {
@Override
public void afterReturning(Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {
System.out.println("通过AfterReturningAdvice接口赠予了一个礼物!");
}
}
最后呢我们只要在前一篇里创建的config.xml里面修改一下配置内容就完成了:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="Robot" class="com.iteye.bolide74.action.Robot">
<property name="name" value="Wall-E" />
</bean>
<!-- 这个是前一篇用Interception Around方式实现的get/give礼物功能,这里可以留着,不用就行了;当然也可以注释掉 -->
<bean id="GiftBySpring" class="com.iteye.bolide74.action.GiftBySpring" />
<!-- 这个是getGift Bean -->
<bean id="GetGift" class="com.iteye.bolide74.action.GetGift" />
<!-- 这个是giveGift Bean -->
<bean id="GiveGift" class="com.iteye.bolide74.action.GiveGift" />
<bean id="GiftProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.iteye.bolide74.impl.ISpeaker</value>
</property>
<property name="target">
<ref bean="Robot" />
</property>
<property name="interceptorNames">
<list>
<!-- 上面的内容都和前一篇一样,区别就在这里的value换成了新的GetGift和GiveGift -->
<value>GetGift</value>
<value>GiveGift</value>
</list>
</property>
</bean>
</beans>
修改完config.xml以后就大功告成了!
应用代码还是直接用的前一篇的那个GiftBySpringTester不用做任何修改,我们直接运行看看输出的结果:
引用
通过MethodBeforeAdvice接口获取了一个礼物!
到达邻居家,对邻居说:你好,我是Wall-E
通过AfterReturningAdvice接口赠予了一个礼物!
看完以上新的get/give礼物功能实现方法,是不是觉得Spring的耦合度确实非常低呢?几乎不用修改太多代码就能换掉老的功能,这也是Spring的优势所在!
由于这一部分的内容还是比较枯燥,所以这一章的就是为了抛砖引玉,大概介绍了一下Spring Adivce的5种类型,而它们详细的功能、实现方式和原理,还是希望各位能举一反三,通过其他途径再去深入、再去了解。
可以说我的《Spring温故知新》系列初衷并不是让读者看完以后就完全掌握了Spring,我还没这种能力。写这一系列的目的,仅仅是为了补充和完善现有的Spring各种教材的内容,着重突出教程中没有或没重点介绍的东西。
因此希望各位在读完这一系列的文章以后,能再多去找一些相关的资料来补充和完善自己的知识,谢谢!
下一章:Spring温故知新(八)静态切入点和CGLIB代理,更智能、更方便!
http://bolide74.iteye.com/blog/1048078
上一章:Spring温故知新(六)AOP面向切面编程 <3>
http://bolide74.iteye.com/blog/1037396
分享到:
相关推荐
SpringSpringSpring温故知新六AOP向切面程Spring温故知新六AOP向切面程
NULL 博文链接:https://bolide74.iteye.com/blog/1050199
spring cloud + openshift example
spring cloud config
常用的spring注解大全,适合新手学习、老手温故知新。读懂spring,平步青云。
温故知新ASP.NET 2.0(C#)温故知新ASP.NET 2.0(C#)温故知新ASP.NET 2.0(C#)温故知新ASP.NET 2.0(C#)温故知新ASP.NET 2.0(C#)
计算机小数表示.温故知新.pdf
数学:吃透课本温故知新.docx
机械军工行业:“温故知新”系列之工业机器人行业复盘(二):从美国汽车行业“2mm工程”看工业机器人国产化空间.pdf
初中语文文学讨论现当代文学温故知新
20210202-银河证券-“温故知新”系列之工业机器人行业复盘(二):从美国汽车行业“2mm工程”看工业机器人国产化空间.pdf
中信建设温故知新,从 4G 看 5G.rar
中信建设温故知新,从 4G 看 5G.pdf
复习知识整理文档,其中介绍了spring的知识和注意点,还包含面试中常被提及的知识,帮助你快速回忆和复习知识,温故知新
行业报告---温故知新,从 4G 看 5G
通信行业:温故知新,从4G看5G-1202-中信建投-12页.pdf
这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number、string、object、Boolean、null、undefined string: 由单引号或双引号来说明,如”string” number:什么整数...
NULL 博文链接:https://macleo.iteye.com/blog/1045211
固定收益专题报告:温故知新,国债期货1903合约回顾与总结_国信证券-13页.pdf
农林牧渔行业专题研究:温故知新,复盘上两轮生猪疫情影响-0213-广发证券-17页.pdf