1. 程式人生 > 其它 >Spring原始碼2-SpringAOP解析

Spring原始碼2-SpringAOP解析

前言

SpringAOP面向切面程式設計是通過預編譯方式和執行其動態代理,實現在不修改原始碼的情況下給程式動態統一新增功能的一種技術,是OOP面向物件程式設計的有效補充。利用AOP技術將日誌記錄,效能統計,安全控制,事務處理,異常處理等程式碼從業務邏輯程式碼中劃分出來,通過對這些行為的分離,可以將它們獨立到非指導業務邏輯的方法中,進而改變這些行為的時候不會影響業務邏輯的程式碼,實現瞭解耦,提高了程式碼的靈活性和可擴充套件性。

一句話:AOP: aspect oriented programming 面向切面程式設計,針對同一類問題的統一處理方式。

SpringAOP簡單切面實用

舉個簡單例項:

需求:使用者登入系統呼叫介面,記錄訪問次數(暫不考慮是否同一個人問題),最終註解方式   1、定義一個統計訪問註解,注意:我這裡是通過介面註解方式呼叫我們的切面介面
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UserStatisticsAnnotation {
}
2、業務功能上添加註解
@Override
@UserStatisticsAnnotation
public List<UserVO> queryUserList(List<String> userIds) {
  
return userServiceDao.queryUserList(userIds); }
3、設計切面統計功能
/**
* AOP切面配置類
*/
@Slf4j
@Configuration
@Aspect
public class AOPConfig {
 
@Pointcut(value = "@annotation(com.example.demo.annotation.UserStatisticsAnnotation)")
public void pointCut() {
}
 
@Before("pointCut()")
public void before() {
  log.info(
"當前系統功能訪問量加1》》"); // 這裡就可以實現自己的業務邏輯功能 } }
  4、以上3步,基本上就定義好了切面內容以及什麼時候使用,那麼接下來就是交個Spring容器管理啟用切面註解
@SpringBootApplication
@MapperScan("com.example.demo.dao")
@EnableAspectJAutoProxy
public class DemoApplication {
public static void main(String[] args) {
  SpringApplication.run(DemoApplication.class, args);
}
}
SpringAOP原始碼解析 主要依據@EnableAspectJAutoProxy註解,相關原始碼解析參考如下博文: Spring AOP 原始碼解析-阿里雲開發者社群 (aliyun.com)