Spring Boot教程(六)使用AOP統一處理Web請求日誌

AOP爲Aspect Oriented Programming的縮寫,意爲:面向切面編程,經過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是Spring框架中的一個重要內容,它經過對既有程序定義一個切入點,而後在其先後切入不一樣的執行內容,好比常見的有:打開數據庫鏈接/關閉數據庫鏈接、打開事務/關閉事務、記錄日誌等。基於AOP不會破壞原來程序邏輯,所以它能夠很好的對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度下降,提升程序的可重用性,同時提升了開發的效率。html

下面主要講兩個內容,一個是如何在Spring Boot中引入Aop功能,二是如何使用Aop作切面去統一處理Web請求的日誌。git

如下全部操做基於chapter4-2-2工程進行。web

準備工做

由於須要對web請求作切面來記錄日誌,因此先引入web模塊,並建立一個簡單的hello請求的處理。spring

  • pom.xml中引入web模塊
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

     

  • 實現一個簡單請求處理:經過傳入name參數,返回「hello xxx」的功能。
    @RestController
    public class HelloController {
    
        @RequestMapping(value = "/hello", method = RequestMethod.GET)
        @ResponseBody
        public String hello(@RequestParam String name) {
            return "Hello " + name;
        }
    
    }

    下面,咱們能夠對上面的/hello請求,進行切面日誌記錄。數據庫

    引入AOP依賴

    在Spring Boot中引入AOP就跟引入其餘模塊同樣,很是簡單,只須要在pom.xml中加入以下依賴:編程

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

    在完成了引入AOP依賴包後,通常來講並不須要去作其餘配置。也許在Spring中使用過註解配置方式的人會問是否須要在程序主類中增長@EnableAspectJAutoProxy來啓用,實際並不須要。app

    能夠看下面關於AOP的默認配置屬性,其中spring.aop.auto屬性默認是開啓的,也就是說只要引入了AOP依賴後,默認已經增長了@EnableAspectJAutoProxy框架

    # AOP
    spring.aop.auto=true # Add @EnableAspectJAutoProxy.
    spring.aop.proxy-target-class=false # Whether subclass-based (CGLIB) proxies are to be created (true) as
     opposed to standard Java interface-based proxies (false).

    而當咱們須要使用CGLIB來實現AOP的時候,須要配置spring.aop.proxy-target-class=true,否則默認使用的是標準Java的實現。spring-boot

  • 源碼來源spa

相關文章
相關標籤/搜索