观众类Audience~~
package com.jCuckoo.demo;
import org.aspectj.lang.ProceedingJoinPoint;
public class Audience {
public void takeSeats() {
System.out.println("----开演之前,请占座----");
}
public void turnOffCellPhones() {
System.out.println("----开始之前,请关机----");
}
public void applaud() {
System.out.println("****鼓掌,继续鼓掌。****");
}
public void turnOnCellPhones() {
System.out.println("****演出结束,可以开机****");
}
public void demandRefund() {
System.out.println("$$太熊了,退我票钱$$");
}
public void watchPerformance(ProceedingJoinPoint joinpoint) {
try {
System.out.println("oooooooo环绕通知开始oooooooo");
long start = System.currentTimeMillis();
joinpoint.proceed();
long end = System.currentTimeMillis();
System.out.println("oooooooo环绕通知结束oooooooo");
System.out.println("演出耗时共计:" + (end - start)
+ "毫秒。");
} catch (Throwable t) {
System.out.println("Boo!Wewantourmoneyback!");
}
}
}
表演接口Performer
package com.jCuckoo.demo;
public interface Performer {
void perform()throws Exception;
}
定义魔术师Juggler,实现表演接口
package com.jCuckoo.demo;
public class Juggler implements Performer {
private int beanBags = 3;
public Juggler() {
}
public Juggler(int beanBags) {
this.beanBags = beanBags;
}
public void perform() throws Exception {
System.out.println("表演开始:魔术师欺骗了" + beanBags + "个游戏豆。");
}
}
spring的配置文档applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="juggler" class="com.jCuckoo.demo.Juggler"/>
<bean id="audience" class="com.jCuckoo.demo.Audience" />
<aop:config>
<aop:aspect ref="audience">
<aop:pointcut id="performance"
expression="execution(* com.jCuckoo.demo.Performer.perform(..))" />
<aop:before pointcut-ref="performance" method="takeSeats" />
<aop:before pointcut-ref="performance" method="turnOffCellPhones" />
<aop:after pointcut-ref="performance" method="turnOnCellPhones" />
<aop:after-returning pointcut-ref="performance"
method="applaud" />
<aop:after-throwing pointcut-ref="performance"
method="demandRefund" />
<aop:around pointcut-ref="performance" method="watchPerformance"/>
</aop:aspect>
</aop:config>
</beans>
测试类,获取魔术师,并进行表演。
package com.jCuckoo.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.jCuckoo.demo.Performer;
public class MainTest {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
Performer performer=(Performer)ctx.getBean("juggler");
try {
performer.perform();
} catch (Exception e) {
e.printStackTrace();
}
}
}
最终结果:
----开演之前,请占座----
----开始之前,请关机----
oooooooo环绕通知开始oooooooo
表演开始:魔术师欺骗了3个游戏豆。
****演出结束,可以开机****
****鼓掌,继续鼓掌。****
oooooooo环绕通知结束oooooooo
演出耗时共计:1毫秒。