SpringBoot學習(四)—AOP切面程式設計
在開始之前先來一篇aop的介紹http://blog.csdn.net/Intlgj/article/details/5671248 aop(面向切面程式設計)不同於oop(面向物件程式設計),aop在實際開發中運用的還是比較常見的,aop能幹什麼 許可權控制、事務控制、動態切入(日誌)等(這也是我面試被問到的一個問題)
現在我假定一個場景,大家都愛吃吃喝喝玩玩我定義一個class類(MethodService)裡面有 吃的方法(eat)也有看電影的方法(movie),吃飯看電影都要錢的,你在看電影吃飯之前你不得考慮身上有沒有錢。參考程式碼如下:
第一步建立一個maven工程工程結構如下
第二步新增aop需要的依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.burning</groupId> <artifactId>spring4_aop</artifactId> <version>1.0-SNAPSHOT</version> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- spring aop支援--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.1.9.RELEASE</version> </dependency> <!-- aspectj 支援 --> <dependency> <groupId>aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.5.4</version> </dependency> <dependency> <groupId>aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.5.4</version> </dependency> </dependencies> </project>
第三步建立四個類
這就是一個人的行為的類 裡面有吃飯和看電影的方法
註解詳細介紹:
@Aspect//定義切面
@Before("execution(* com.burning.aop.MethodService.*(..))")//execution切入的路徑(在MthodService中的方法執行之前先執行這個)
@Component:定義Spring管理Bean
@AspectJ風格的切面可以通過@Compenent註解標識其為Spring管理Bean,而@Aspect註解不能被Spring自動識別並註冊為Bean,必須通過@Component註解來完成
@Configuration//配置類
@ComponentScan("com.burning.aop")//掃描com.burning.aop所有的bean
@EnableAspectJAutoProxy//開啟Spring對aop的支援
第四步圖解
看圖就能理解其實在看電影吃飯你都要確定自己有沒有錢(這也是兩個行為執行之前共同的地方),比如我們在實際開發當中一些操作判斷有沒有操作的許可權的時候可以用aop的去做許可權控制。其實也就是執行一個方法之前的操作。不僅有@Before 有@After @Around可以這連個註解參考:http://outofmemory.cn/code-snippet/3025/spring-AOP-Around-Before-After-differentiate