做了个Spring Aop的Demo,记录一下。
在Sping Bean的基础上,增加“观众”的角色,观众在观看表演之前,要就坐,关掉手机,观看之后,鼓掌或者对表演不满,要求退票。
package com.audience;
public class Audience {
public void takeSeat() {
System.out.println("take seat");
}
public void turnOffPhone() {
System.out.println("turn off phone");
}
public void applaud() {
System.out.println("applaud");
}
public void demandRefund() {
System.out.println("demand refund");
}
}
配置文件,如下所示
<?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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="duke" class="com.performer.service.impl.PoeticJuggler">
<constructor-arg value="15"></constructor-arg>
<constructor-arg ref="sonnet"></constructor-arg>
</bean>
<bean id="jake" class="com.performer.service.impl.Instrumentalist"
p:song = "little star"
p:instrument-ref = "piano" />
<bean id="audience" class="com.audience.Audience"></bean>
<bean id="sonnet" class="com.poem.service.impl.Sonnet"></bean>
<bean id="piano" class="com.instrument.service.impl.Piano"></bean>
<aop:config>
<aop:aspect ref="audience">
<aop:pointcut expression="execution(* *.perform(..))" id="a"/>
<aop:before pointcut-ref="a" method="takeSeat"/>
<aop:before pointcut-ref="a" method="turnOffPhone"/>
<aop:after-returning pointcut-ref="a" method="applaud"/>
<aop:after-throwing pointcut-ref="a" method="demandRefund"/>
</aop:aspect>
</aop:config>
</beans>
运行结果,如下图所示
另附源码