aop思想通過動態代理,一定程度上實現了代碼的解耦。我們可以將日誌模塊,權限校驗,事物等模塊,與核心的業務代碼相隔離,讓程序員在寫代碼的時候,能夠更加專注於業務。
基於註解實現AOP步驟:
①將目標類與切面類都加入到ioc容器中。
目標類該用啥註解用啥,切面類通常用@Component
即可。另外,記得在applicationContext.xml文件中配置包掃描。
②爲切面類標註@Aspect註解,告訴Spring哪些是切面類。
③在切面類的各個通知方法中,標註註解,並配置切入點表達式,高數spring這些通知方法都何時何地執行。
④開啓基於註解的AOP功能。 <aop:aspectj-autoproxy/>
以上的操作,可能是我們更加熟悉的開發方式,畢竟註解相較於配置方便很多很多。但是,xml配置也有它自有的優點,那就是功能更加完善。比如一個第三方的jar包,當我需要引用其中的一個切面類時,註解的方式就顯得有些喫力了。xml配置方式就能很好的補足了這一點。
另外,重要的切面類,一般習慣放置在xml配置中,比如重要的權限驗證,事物隔離等。
基於xml配置的AOP步驟:
①配置bean
所有加入到ioc容器的組件,在配置文件中使用bean標籤進行管理。
<bean id="xxx1" class="xxxx1"/>
②指定切面
對應@Aspect註解,我們需要在aop名稱空間下進行切面類的配置
每一個<aop:aspect>
標籤相當於一個@Aspect註解,屬性中的ref需要填寫<bean>
標籤中切面類的id。
<aop:config>
<aop:aspect ref="xxx1">
</aop:aspect>
</aop:config>
③配置通知方法
繼續在第二步的<aop:aspect>
標籤內部配置通知方法對應的標籤,與註解的命名方式幾乎一模一樣。method爲切面類中的通知方法;pointcut爲切入點表達式;returning指定返回通知的返回參數;throwing指定異常通知的異常參數。
<aop:config>
<aop:aspect ref="xxx1">
<aop:before method="" pointcut="">
<aop:after method="" pointcut="">
<aop:after-returning method="" pointcut="" returning="">
<aop:after-throwing method="" pointcut="" throwing="">
<aop:around method="" pointcut="">
</aop:aspect>
</aop:config>
④開啓基於註解的AOP功能。 <aop:aspectj-autoproxy/>