今天對 Spring AOP的使用作個簡單說明。spring
一、AOP的實現方式: 1)XML 2)註解maven
二、在上面兩種實現方式中,如今註解使用的愈來愈普遍;它的主要好處是寫起來比xml要方便的多,但也有解分散到不少類中,很差管理和維護的缺點,今天主要分享經過註解的實現方式。 主要註解有: @Aspect、@Pointcut 和通知,見下圖:spring-boot
![![]單元測試
三、註解說明: 1)@Aspect:類級別註解,用來標誌類爲切面類。測試
1)Pointcut表達式: (1)designators (指示器):經過哪些方法和方式,去匹配類和方法;如executionthis
(2)Wildcards:經過通配符描述方法,如「* .. +」等代理
(3)operators:如||、&&、!code
2)Adivice註解(5種)xml
四、使用的簡單例子:對象
1)新建springboo引入Spring AOP maven依賴: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
2)一個產品Service類,代碼:
import org.springframework.stereotype.Service; @Service public class ProductService{ public void saveProduct() { System.out.println("save product now ……"); } public void deleteProduct() { System.out.println("delete product now ……"); } }
3)編寫切面類:
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Aspect @Component public class AspectTest { @Pointcut("within(cn.exercise.service.impl.ProductService)") public void adminOnly() { } @Before("adminOnly()") public void before() { System.out.println("------------ @Aspect ###before"); } }
4)編寫單元測試:
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import cn.exercise.service.impl.ProductService; @RunWith(SpringRunner.class) @SpringBootTest public class AopLeaningdemoApplicationTests { @Autowired private ProductService productService; @Test public void testAOP() { productService.saveProduct(); productService.deleteProduct(); } }
5)運行結果: