1. 程式人生 > >Spring 學習筆記(九)AOP 之註解方式與零配置方式

Spring 學習筆記(九)AOP 之註解方式與零配置方式

術語先來一發

  • 目標物件(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