Java框架學習_Spring(四)Spring_AOP相關術語、AOP_xml的配置和簡單測試(涉及junit和aop整合進階)
阿新 • • 發佈:2019-01-14
面向切面程式設計的感覺就是:以前程式是由上往下執行的,如果我需要新增一個什麼功能,就需要去改程式碼,但是我用AOP的動態代理,就像膠帶一樣,往上面一貼就行了,不要用的時候再撕下來,是橫向的,後面會有很多膠帶的型別(就是下面的Advice通知),往上貼,往下帖,環繞貼,遇到異常貼等等,就很方便
1、AOP相關術語:
2、AOP的配置和簡單測試:
這裡先用xml配置的方式,後面再說註解的方法
- 導包 :Spring_AOP開發jar包
- 配置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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd" > <!-- bean definitions here -->
<!-- 需要被代理的物件 -->
<bean id="AopDemo" class="cn.nupt.aopDemo.AopDemo"></bean>
<!-- 切面類 -->
<bean id="AopInsert" class="cn.nupt.aopClass.AopInsert"></bean>
<aop:config>
<!-- 配置哪些類的哪些方法需要進行增強,這裡是AopDemo下面的hehe方法 -->
<aop:pointcut expression="execution(* cn.nupt.aopDemo.AopDemo.hehe(..))" id="hehe" />
<!-- 配置切面 -->
<aop:aspect ref="AopInsert">
<!-- 在hehe方法前面設定我們切面類的check方法 -->
<aop:before method="check" pointcut-ref="hehe" />
</aop:aspect>
</aop:config>
</beans>
- 編寫執行類(就是要被代理/增強的類)
package cn.nupt.aopDemo;
public class AopDemo {
public void haha() {
System.out.println("haha");
}
public void hehe() {
System.out.println("hehe");
}
public void xixi() {
System.out.println("xixi");
}
}
- 編寫切面類
package cn.nupt.aopClass;
//編寫切面類
public class AopInsert {
public void check() {
System.out.println("許可權校驗中。。。");
}
}
- 編寫測試類,這裡用到了junit和AOP的整合
package cn.nupt.test;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.nupt.aopDemo.AopDemo;
//junit和aop整合
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class AopTest {
@Resource(name="AopDemo")
private AopDemo aopDemo;
@Test
public void test() {
aopDemo.haha();//輸出haha
aopDemo.hehe();//輸出hehe
aopDemo.xixi();//輸出xixi
}
}
輸出:
haha
許可權校驗中。。。
hehe
xixi