进行完annotation的测试之后,立马进行了xml方式的测试,重新用0100工程复制新的一个工程,命名为:Spring_AOP_0200_XML
把其中的所有关于spring,aspectj annotation去掉(保留@Override注解)
有礼貌的服务生代理类改成如下形式:
package com.aop.proxy;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.aspectj.lang.ProceedingJoinPoint;
/**
* @author 紫竹
* 礼貌的服务生代理:在打招呼之前说一声hello,服务的时候记录时间,结束后say:good bye, have a good day
*/
public class NiceWaiterProxy {
public void before(){
System.out.print("hello , ");
}
public void after(){
System.out.print("have a good day!!!");
}
public void around(ProceedingJoinPoint pjp){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
System.out.println("I am a clock , record: " + sdf.format(new Date()) );
try {
pjp.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("I am a clock , record: " + sdf.format(new Date()) );
}
}
然后将annotation的方式改成xml方式,修改beans.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<!-- 将需要用spring 初始化的bean全部配上 -->
<bean id="naiveWaiter" class="com.aop.impl.NaiveWaiter"></bean>
<bean id="niceWaiterProxy" class="com.aop.proxy.NiceWaiterProxy"></bean>
<aop:config>
<!-- 定义一个切面,id="myAspect" 没用到,将com.aop.proxy.NiceWaiterProxy类声明为切面类 -->
<aop:aspect id="myAspect" ref="niceWaiterProxy">
<!-- 声明连接点,声明在哪些类的哪些方法上需要进行切面 -->
<aop:pointcut id="greet" expression="execution(* com.aop..greetTo(..))" />
<aop:pointcut id="server" expression="execution(* com.aop..server*(..))" />
<aop:pointcut id="bye" expression="execution(* com.aop..bye(..))" />
<!-- 织入,在哪个连结点织入,是在连结点之前,之后,还是前后都需要 -->
<aop:before pointcut-ref="greet" method="before" />
<aop:around pointcut-ref="server" method="around" />
<aop:after pointcut-ref="bye" method="after" />
</aop:aspect>
</aop:config>
</beans>
运行测试类,输出结果:
hello , greet to Jonhe....
I am a clock , record: 2011-30-11 23:30:13
server to ....
I am a clock , record: 2011-30-11 23:30:13
bye !
have a good day!!!
很好,测试结束!