sping aop 是基於代理方式實現的,運行時編織的aop框架。spring aop 2.0 爲用戶自定aspect引入了更簡單但更強大的方式,同時支持schema-based的方式和@AspectJ anotation風格。 spring aop 2.0還保持了向下兼容性,徹底支持aop 1.2的使用方式和底層的aop api。git
spring aop相關概念和通常意義上的aop保持一致。github
aspect
橫切多個業務類的功能,通常是日誌,事務等。在spring aop中是一個POJO或者帶有@AspectJ標註的POJOspring
joint point
程序執行中的某個點,在spring aop中只有method的運行時api
advice
和某個joint point關聯的動做,分before, after returning, after throwing, after, around框架
pointcut
joint point謂詞代理
spring aop 2.0對接口風格的對象使用JDK動態代理,對沒有接口的對象使用CGLIB。強制spring使用CGLIB的方式是日誌
<aop:config proxy-target-class="true"> <!-- other beans defined here... --> </aop:config>
在spring 3.2以後的版本不須要額外引入cglib.jarcode
須要注意的是,若是對象實現了接口,而沒有使用強制使用CGLIB的話,spring的動態代理實現了全部的接口,ctx.getBean(#id)
只能強制轉換爲某個接口,若是強制轉換爲class類型,會報類型錯誤(包括@Autowired
和@Resource
方式實現的)xml
例子參見examples on github對象