Spring 學習筆記(九)AOP 之註解方式與零配置方式
阿新 • • 發佈:2018-12-16
術語先來一發
- 目標物件(Target)
- 代理物件(Proxy)
- 連線點(Joinpoint)
- 切入點(Pointcut)
- 通知(增強)(Advice)
- 切面(Aspect、Advisor)
- 織入、切入(weaving)
1. 建立目標物件和代理物件, 目標物件還和Spring IOC一樣的註解, 下面是代理類
增加了@Aspect以及描述方法的通知型別
package org.spring.exampleAOP; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; /** * 切面類 */ @Component //首先建立物件 @Aspect //再說明此物件是代理物件 public class MyAspect1 { @After("execution(* org.spring.exampleAOP.Sadamu.*(..))") //切入點表示式 After置後執行 public void log(){ System.out.println("記錄日誌"); } }
2. applicationContext.xml的配置
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--1,配置要掃描的包--> <context:component-scan base-package="org.spring.exampleAOP" /> <!--2,開啟代理--> <aop:aspectj-autoproxy /> </beans>
3. 零配置也就是在Spring配置類中增加了開啟代理註解 @EnableAspectJAutoProxy
package org.spring.exampleAOP; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.PropertySource; /** * spring 配置類 */ @Configuration @ComponentScan(value = {"org.spring.exampleAOP"}) //註解掃描 @PropertySource(value="classpath:my.properties") //載入配置檔案 @EnableAspectJAutoProxy //@Import(value={SpringConfig.class}) // 匯入多個配置類 對於properties public class SpringConfig { }
4. 測試, 還和原來一樣
package org.spring.exampleAOP;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test {
public static void main(String[] args) {
//讀取xml檔案
//ApplicationContext applicationContext1 = new FileSystemXmlApplicationContext("./src/applicationContext.xml");
//零配置方式
ApplicationContext applicationContext1 = new AnnotationConfigApplicationContext(SpringConfig.class);
//獲取Bean物件
People people1 = (People) applicationContext1.getBean("sadamu");
people1.Shoot();
}
}
5. 測試結果
薩達姆開槍了
記錄日誌
Process finished with exit code 0