話不多說,通過代碼我們梳理了一下AOP的相關知識點(觀衆看話劇)
一:定義觀衆類(我們當做一個切面)可以這樣理解,我們把這個類切成一塊一塊的,向壘積木一樣,我們爲核心業務服務
package com.ccut.model;
public class Audience {
public void takeSeat() {
System.out.println("The audiences take seat.");
}
public void turnOffPhone() {
System.out.println("The audiences turn off the phone.");
}
public void applaud() {
System.out.println("鼓掌...");
}
public void unHappy() {
System.out.println("The audiences are unhappy...");
}
}
二:定義切點類 ,DukePerformer類裏面有一個方法,表演,
package com.ccut.model;
public class DukePerformer {
private String name;
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return this.name;
}
public void perform() {
System.out.println(this.name+" 唱歌啦.");
}
}
三:在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" xmlns:context="http://www.springframework.org/schema/context"
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/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- AOP學習時的配置 演員 -->
<bean id="DukePerformer" class="com.ccut.model.DukePerformer">
<property name="name" value="小飛飛" />
</bean>
<!--觀衆 -->
<bean id="audience" class="com.ccut.model.Audience" />
<aop:config>
<!--配置切點 也就是我們常說的核心業務-->
<aop:pointcut id="performCutPoint" expression="execution(* *.perform(..))" />
<!--aop:aspect是配置切面,也就是周變業務,我們將非業務方法切成類似一塊塊的 ,在切面前或者後執行 -->
<aop:aspect ref="audience">
<!-- 在主業務之間直線 -->
<aop:before method="takeSeat" pointcut-ref="performCutPoint" />
<aop:before method="turnOffPhone" pointcut-ref="performCutPoint" />
<!-- 成功返回之後的通知 -->
<aop:after-returning method="applaud" pointcut-ref="performCutPoint" />
<!--定義拋出異常後的通知 -->
<aop:after-throwing method="unHappy" pointcut-ref="performCutPoint" />
</aop:aspect>
</aop:config>
</beans>
四:主方法
package com.ccut.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.ccut.model.DukePerformer;
public class Main {
public static void main(String[] args)
{
// ApplicationContext ctx=new FileSystemXmlApplicationContext("src/com/XinXiangShop/AOP/applicationContext.xml");
ApplicationContext ctx=new ClassPathXmlApplicationContext("applilcationContext.xml");
DukePerformer per=(DukePerformer)ctx.getBean("DukePerformer");
per.perform();
}
}