上篇文章我們介紹了SpringAOp通過註解方式進行配置的例子(我不喜歡說那種概念性的東西,我感覺通過代碼來讀最好)
1:創鍵Drama類(當做切點)
package com.ccut.model1;
public class Drama {
public void perform() {
for (int i = 0; i < 5; i++) {
System.out.println("話劇正在進行中——");
}
}
}
2:創建觀衆類,當做切面
package com.ccut.model1;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
/**
*觀衆(表示這是個切面)
*/
//@Aspect表示切面
@Aspect
public class Audience {
//我們必須在xml裏面聲明<aop:aspectj-autoproxy />,我們才能用這些註解
@Pointcut("execution(* com.ccut.model1.Drama.perform(..))")
public void performance() {} // 定義切點
@Before("performance()")
public void takeSeats() {
// 節目開始之前
System.out.println("演出前——觀衆開始入座");
}
@Before("performance()")
public void turnOffCellPhones() {
// 節目開始之前
System.out.println("演出前——觀衆關機或靜音");
}
@AfterReturning("performance()")
public void applaud() {
// 節目成功結束之後
System.out.println("演出很成功——觀衆鼓掌:啪啪啪");
}
@AfterThrowing("performance()")
public void demandRefund() {
// 節目表演失敗之後
System.out.println("節目演出很失敗——切!一點都不好看,我們要求退錢!");
}
}
3:配置文件如何配置.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"
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">
<!--添加<aop:aspectj-autoproxy />實現註解切面。 -->
<aop:aspectj-autoproxy />
<bean id="drama" class="com.ccut.model1.Drama" />
<bean id="audience" class="com.ccut.model1.Audience" />
</beans>
4:主方法
package com.ccut.model1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AudienceTest {
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("aop1.xml");
Drama drama = (Drama)ctx.getBean("drama");
drama.perform();
}
}
5:截圖