Spring原始碼2-SpringAOP解析
阿新 • • 發佈:2022-05-28
前言
SpringAOP面向切面程式設計是通過預編譯方式和執行其動態代理,實現在不修改原始碼的情況下給程式動態統一新增功能的一種技術,是OOP面向物件程式設計的有效補充。利用AOP技術將日誌記錄,效能統計,安全控制,事務處理,異常處理等程式碼從業務邏輯程式碼中劃分出來,通過對這些行為的分離,可以將它們獨立到非指導業務邏輯的方法中,進而改變這些行為的時候不會影響業務邏輯的程式碼,實現瞭解耦,提高了程式碼的靈活性和可擴充套件性。
一句話:AOP: aspect oriented programming 面向切面程式設計,針對同一類問題的統一處理方式。
SpringAOP簡單切面實用
舉個簡單例項:
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface UserStatisticsAnnotation { }2、業務功能上添加註解
@Override @UserStatisticsAnnotation public List<UserVO> queryUserList(List<String> userIds) {3、設計切面統計功能return userServiceDao.queryUserList(userIds); }
/** * 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(4、以上3步,基本上就定義好了切面內容以及什麼時候使用,那麼接下來就是交個Spring容器管理啟用切面註解"當前系統功能訪問量加1》》"); // 這裡就可以實現自己的業務邏輯功能 } }
@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)