一、什麼是aop
面向切面程式設計,通過預編譯方式和執行期動態**實現程式功能的統一維護的一種技術。
在不影響原來功能**的基礎上,使用動態**加入自己需要的一些功能(比如許可權的驗證,事務的控制,日誌的記錄等等),移除之後,並不影響原來的功能
面向切面程式設計是通過動態**實現的,是對物件導向思想的補充。
可以提供宣告式的事務管理。
aop的advice有哪些
1)before:在執行切入的方法之前,執行**
2)after returning:在執行切入的方法正常執行(沒有異常)之後,執行**
3)after throwing:在執行切入的方法發生異常的時候,執行**
4)after:在執行切入的方法無論是否發生異常,都必須最後執行**
二、配置切點和切面
1)找到需要加事務的方法(方法的定位,可以類似於萬用字元來定位)
execution(public * cn.com.bochy.dao.impl.userdaoimpl.insertuser(..))
開發中,事務的處理是在service層處理的,所以必須切入service層
execution(public * cn.com.bochy.service.impl.*.*(..))
2)找到之後,在方法開始之前,需要加上事務
對應advice:before
3)在方法執行中如果有異常,回滾
對應advice:after throwing
4)在方法執行中沒有異常,提交
對應advice:after returning
5)無論是否有異常,關閉釋放資源
對應advice:after
<切面類context:component-scan
base-package
="com.zy"
>
context:component-scan
>
<
aop:aspectj-autoproxy
proxy-target-class
="true"
>
aop:aspectj-autoproxy
>
packagetest類com.zy.aop;
import
org.apache.log4j.logger;
import
org.aspectj.lang.annotation.after;
import
org.aspectj.lang.annotation.afterreturning;
import
org.aspectj.lang.annotation.afterthrowing;
import
org.aspectj.lang.annotation.aspect;
import
org.aspectj.lang.annotation.before;
import
org.aspectj.lang.annotation.pointcut;
import
org.springframework.stereotype.component;
@component
@aspect
public
class
myaop
@after("mypoint()")
public
void
myafter()
@afterreturning("mypoint()")
public
void
myafter2()
@afterthrowing("mypoint()")
public
void
myafter3()
//定義切點--寫註解---寫在某個方法上
@pointcut("execution(public * com.zy.dao.impl.userdaoimpl.login(..))")
public
void mypoint(){}//
傀儡 無任何意義
}
packagespringmvc返回jsontest;
import
org.junit.test;
import
import
com.zy.service.impl.userserviceimpl;
public
class
mytest2
}
@responsebodypublic object getuser()
//
//1到springmvc json包
中配置 (沒有這個會406)
//3controller中方法返回值改為object
//4在controller中方法上加@responsebody
spring學習筆記 2
spring對aop的支援 1 如果目標物件實現了介面,預設情況下會採用jdk的動態 實現aop 2 如果目標物件實現了介面,可以強制使用cglib實現aop 3 如果目標物件沒有實現了介面,必須採用cglib庫,spring會自動在jdk動態 和cglib之間轉換 如何強制使用cglib實現aop...
spring框架學習筆記2
springioc 1 責任鏈 我們使用mvc進行開發的時候,資料在各層之間進行傳遞,資料在業務層上構成乙個鏈條,這個鏈條成為責任鏈.2 基於責任鏈模式開發的缺點 責任鏈開發模式,我們發現層與層之間互相呼叫,造成層與層耦合性太高.3 解決的方案 spring ioc 控制反轉 4 實現 step 1...
決戰春招Spring學習筆記2
經過上次的學習和練習掌握了基於xml的ioc配置,用註解的配置不是很熟練但無傷大雅繼續往下學,以後在實戰中複習 aop為aspect oriented programming的縮寫,意為 面向切面程式設計 ioc是為了給 結耦,用反射的方式建立,降低 互相的依賴 那aop存在的意義是什麼?答 為了解...