Spring學(xué)習(xí)筆記 - 第003天

使用AOP

  • 什么是AOP

AOP是面向切面編程的縮寫进栽。在軟件開發(fā)中径密,散布于應(yīng)用中多處的功能被稱為橫切關(guān)注的(Cross-Cutting Concern)钾恢。
這些橫切關(guān)注點從概念上是與應(yīng)用程序的業(yè)務(wù)邏輯分離的(但是往往又要嵌入到應(yīng)用的邏輯中)解幽,把這些橫切關(guān)注點與業(yè)務(wù)邏輯分離開來就是AOP要解決的問題廷粒。
如果說依賴注入幫助我們解決了對象之間的耦合關(guān)系窘拯,那么AOP就是要把橫切關(guān)注功能和它們所影響的對象之間進(jìn)行解耦合。

  • AOP的術(shù)語:

A.Advice(增強):定義切面的功能以及使用的時間坝茎。

  • 前置增強(Before)
  • 后置增強(After)
  • 返回增強(AfterReturning)
  • 異常增強(AfterThrowing)
  • 環(huán)繞增強(Around)

B.Join Point(連接點):應(yīng)用程序的邏輯跟切面交匯的一個點涤姊。
C.Pointcut(切入點):切入用來定義切面使用的位置。定義切面時可以使用利用切點表達(dá)式來描述在什么地方應(yīng)用切面

AspectJ指示器 描述
arg()
@args()
execution() 連接到的執(zhí)行方法
this()
target()
@target()
within()
@within()
@annotation

D.Aspect(切面):增強和切入點的集合嗤放。
E.Introduction(引入):允許我們給現(xiàn)有的類添加新方法或?qū)傩浴?br> F.Weaving(織入):把切面應(yīng)用于目標(biāo)對象(創(chuàng)建代理對象)的過程思喊。

持久層使用JPA規(guī)范

1.在src目錄下新建文件夾META-INF
2.新建xml文件:persistence.xml

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
    version="2.1">

    <persistence-unit name="Demo">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>     
        <class>com.kygo.entity.User</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:mysql://localhost:3306/hib?useUnicode=true&characterEncoding=utf8" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="123456" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

3.新建JPAUtil工具類

public class JPAUtil {
    private static ThreadLocal<EntityManager> threadLocal =
            new ThreadLocal<>();    
    private static EntityManagerFactory factory = null; 
    static {
        factory = Persistence.createEntityManagerFactory("Demo");
    }   
    private JPAUtil() {
        throw new AssertionError();
    }
    public static EntityManager getCurrentEM() {
        EntityManager entityManager = threadLocal.get();
        if (entityManager == null) {
            entityManager = factory.createEntityManager();
            threadLocal.set(entityManager);
        }
        return entityManager;
    }
}

事務(wù)切面

@Aspect
public class TxAspect { 
    // 切面執(zhí)行的位置
    @Pointcut("execution(* com.kygo.biz.impl.*.*(..))")
    public void foo() {}
    
    // 切面執(zhí)行的時機
    @Around("foo()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
                EntityTransaction tx = JPAUtil.getCurrentEM().getTransaction();
        try {
            tx.begin();
            Object retValue = joinPoint.proceed(joinPoint.getArgs());
            tx.commit();
            return retValue;
        } catch (Throwable e) {
            tx.rollback();
            throw e;
        } 
    }   
}

xml配置


    <bean id="tx" class="com.kygo.aspect.TxAspect" />

    <aop:config>
        <aop:aspect id="txAspect" ref="tx">
            <aop:around method="around" 
                pointcut="execution(* com.kygo.biz.impl.*.*(..))"/>
        </aop:aspect>
    </aop:config>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市次酌,隨后出現(xiàn)的幾起案子恨课,更是在濱河造成了極大的恐慌舆乔,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剂公,死亡現(xiàn)場離奇詭異希俩,居然都是意外死亡,警方通過查閱死者的電腦和手機纲辽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門颜武,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人文兑,你說我怎么就攤上這事盒刚。” “怎么了绿贞?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵因块,是天一觀的道長。 經(jīng)常有香客問我籍铁,道長涡上,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任拒名,我火速辦了婚禮吩愧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘增显。我一直安慰自己雁佳,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布同云。 她就那樣靜靜地躺著糖权,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炸站。 梳的紋絲不亂的頭發(fā)上星澳,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音旱易,去河邊找鬼禁偎。 笑死,一個胖子當(dāng)著我的面吹牛阀坏,可吹牛的內(nèi)容都是我干的如暖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼忌堂,長吁一口氣:“原來是場噩夢啊……” “哼装处!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妄迁,失蹤者是張志新(化名)和其女友劉穎寝蹈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體登淘,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡箫老,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了黔州。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耍鬓。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖流妻,靈堂內(nèi)的尸體忽然破棺而出牲蜀,到底是詐尸還是另有隱情,我是刑警寧澤绅这,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布涣达,位于F島的核電站,受9級特大地震影響证薇,放射性物質(zhì)發(fā)生泄漏度苔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一浑度、第九天 我趴在偏房一處隱蔽的房頂上張望寇窑。 院中可真熱鬧,春花似錦箩张、人聲如沸甩骏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽横漏。三九已至,卻和暖如春熟掂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扎拣。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工赴肚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人二蓝。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓誉券,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刊愚。 傳聞我的和親對象是個殘疾皇子踊跟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容