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>
@RestController public class HelloController { @RequestMapping(value = "/hello", method = RequestMethod.GET) @ResponseBody public String hello(@RequestParam String name) { return "Hello " + name; } }
下面,咱們能夠對上面的/hello請求,進行切面日誌記錄。數據庫
在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