javascript
Spring学习(三)Spring AOP 简介
本文借鑒:Spring學習(特此感謝!)
一、簡介
定義
aop就是面向切面編程,在數據庫事務中切面編程被廣泛使用。
在面向切面編程的思想里面,把功能分為核心業務功能,和周邊功能。
核心業務:比如登陸,增加數據,刪除數據都叫核心業務
周邊功能:比如性能統計,日志,事務管理等等
PS:在 Spring 面向切面編程的AOP思想里,周邊功能即被定義為切面
核心思想
核心業務功能和切面功能分別獨立進行開發,然后把切面功能和核心業務功能 "編織" 在一起,這就叫AOP。
目的
是將那些與業務無關,卻被業務模塊所共同調用的邏輯或責任(例如事務處理、日志管理、權限控制等)封裝起來,便于減少系統的重復代碼,降低模塊間的耦合度,并有利于未來的可拓展性和可維護性。
相關概念
切入點(Pointcut)
在哪些類,哪些方法上切入(where)
通知(Advice)
在方法執行的時機(when:方法前/方法后/方法前后)做什么(what:增強的功能),包括 “around,” “before” and "after"等多種類型。
切面(Aspect)
切面 = 切入點 + 通知,通俗點就是:在什么時機,什么地方,做什么增強!
織入(Weaving)
把切面加入到對象,并創建出代理對象的過程。(由 Spring 來完成)
代碼分析
1、新建一個類(功能:模擬業務功能代碼)
/*** 模擬正式的業務service*/ public class ProductService {public void doSomeService(){System.out.println("doSomeService");//模擬正式業務 } }2、新建一個切面(功能:模擬日志記錄)
/*** 定義一個切面(功能:模擬記錄日志)*/ public class LoggerAspect {//入參可以理解為相應的核心業務,方法內代碼操控核心業務在這個切面中怎么處理(下面的功能實現了在核心業務的前后分別打印兩行語句)public Object log(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("start log:" + joinPoint.getSignature().getName());Object object = joinPoint.proceed();System.out.println("end log:" + joinPoint.getSignature().getName());return object;} }
3、xml配置剛才新增的兩個bean,再對AOP進行配置
<!--配置一個名叫productService的bean,這個service功能是模擬正式業務的代碼--><bean name="productService" class="service.ProductService"/><!--配置日志bean--><bean id="loggerAspect" class="aspect.LoggerAspect"/><!--配置AOP切面--><aop:config><!-- 配置切入點 expression屬性設置切點表達式(AspectJ) --><aop:pointcut id="loggerCutpoint" expression="execution(* service.ProductService.*(..)) "/><!-- 配置切面(增加日志功能) --><aop:aspect id="logAspect" ref="loggerAspect"><!-- 配置切面切入時機 around表示在核心業務功能前后執行切面 method表示要調用的方法--><aop:around pointcut-ref="loggerCutpoint" method="log"/></aop:aspect></aop:config>4、測試代碼
//1、使用ApplicationContext類讀取xml配置文件生成bean工廠(bean工廠為了控制反轉時獲取對象用)ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});//4、查看切面的實現結果ProductService productService = (ProductService)context.getBean("productService");productService.doSomeService();5、顯示結果
?
轉載于:https://www.cnblogs.com/riches/p/11504878.html
總結
以上是生活随笔為你收集整理的Spring学习(三)Spring AOP 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle学习(十五)PLSQL安装
- 下一篇: Spring学习(四)IOC详解