spring cache 配置使用aspectj LTW

spring cache 提供了基于注解的緩存配置方法赡麦,其實(shí)現(xiàn)原理和事務(wù)管理的實(shí)現(xiàn)是一樣的, 都是通過 spring aop來實(shí)現(xiàn)的翅娶。spring aop 有一個(gè)問題貌虾, 默認(rèn) aop的實(shí)現(xiàn)是使用java 動(dòng)態(tài)代理技術(shù)來實(shí)現(xiàn)的锐借, 這樣就會(huì)導(dǎo)致,同一個(gè)對象內(nèi)的方法之間的調(diào)用疗杉,是不會(huì)被aop攔截到的繁堡。

要解決這個(gè)問題,我們可以選擇調(diào)整代碼的位置外乡数,讓緩存的方法和調(diào)用它的方法分離在不同的類中椭蹄,但是這種解決方案是不完美的,會(huì)導(dǎo)致原本內(nèi)聚的類净赴,分散在了不同的地方绳矩。

除了調(diào)整代碼外,還有什么辦法能支持這種情況玖翅?
使用AspectJ 進(jìn)行 織入翼馆。

AspectJ 織入器weaver 支持三種織入方式:

  • compile-time weaving 使用aspectj 編譯器進(jìn)行編譯源碼
  • post-compile weaving 對class 文件進(jìn)行織入
  • load-time weaving(LTW) 當(dāng)class loader 加載類的時(shí)候,進(jìn)行織入

使用

通過JVM的-javaagent 加載代理金度,在代理內(nèi)持有Instrumentation 對象应媚,方便后續(xù)的注冊class translate hook。

-javaagent:D:\lib\spring-instrument\spring-instrument-4.3.0.RELEASE.jar

spring cache 配置 mode="aspectj"


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.1.xsd">

    <context:load-time-weaver/>

    <cache:annotation-driven mode="aspectj"/>

    <bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
        <constructor-arg ref="redisTemplate"/>
    </bean>

    <bean id="propertyConfigurer3" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="order" value="3" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
        <property name="locations">
            <list>
                <value>classpath:redis.properties</value>
            </list>
        </property>
    </bean>

    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="minIdle" value="${redis.minIdle}" />
        <property name="maxIdle" value="${redis.maxIdle}" />
        <property name="maxTotal" value="${redis.maxActive}" />
        <property name="maxWaitMillis" value="${redis.maxWait}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>

    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="${redis.host}" />
        <property name="port" value="${redis.port}" />
        <property name="password" value="${redis.password}" />
        <property name="usePool" value="true" />
        <property name="poolConfig" ref="poolConfig" />
    </bean>

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory"   ref="connectionFactory" />
    </bean>


    <bean id="redisContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory"/>
    </bean>

</beans>


META-INF/aop.xml 聲明需要進(jìn)行織入的目標(biāo)類



<aspectj>
    <weaver options="-verbose -showWeaveInfo">
        <include within="com.xxx..*"/>
    </weaver>
</aspectj>


參考 Load-Time Weaving

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猜极,一起剝皮案震驚了整個(gè)濱河市中姜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跟伏,老刑警劉巖丢胚,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異受扳,居然都是意外死亡携龟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門勘高,熙熙樓的掌柜王于貴愁眉苦臉地迎上來峡蟋,“玉大人坟桅,你說我怎么就攤上這事∪锘龋” “怎么了仅乓?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匿又。 經(jīng)常有香客問我,道長建蹄,這世上最難降的妖魔是什么碌更? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮洞慎,結(jié)果婚禮上痛单,老公的妹妹穿的比我還像新娘。我一直安慰自己劲腿,他們只是感情好旭绒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焦人,像睡著了一般挥吵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上花椭,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天忽匈,我揣著相機(jī)與錄音,去河邊找鬼矿辽。 笑死丹允,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袋倔。 我是一名探鬼主播雕蔽,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宾娜!你這毒婦竟也來了批狐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤前塔,失蹤者是張志新(化名)和其女友劉穎贾陷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘱根,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡髓废,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了该抒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慌洪。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顶燕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冈爹,到底是詐尸還是另有隱情涌攻,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布频伤,位于F島的核電站恳谎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏憋肖。R本人自食惡果不足惜因痛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岸更。 院中可真熱鬧鸵膏,春花似錦、人聲如沸怎炊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽评肆。三九已至债查,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓜挽,已是汗流浹背攀操。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秸抚,地道東北人速和。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像剥汤,于是被迫代替她去往敵國和親颠放。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理吭敢,服務(wù)發(fā)現(xiàn)碰凶,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 本章內(nèi)容: 面向切面編程的基本原理 通過POJO創(chuàng)建切面 使用@AspectJ注解 為AspectJ切面注入依賴 ...
    謝隨安閱讀 3,127評論 0 9
  • AOP實(shí)現(xiàn)可分為兩類(按AOP框架修改源代碼的時(shí)機(jī)): 靜態(tài)AOP實(shí)現(xiàn):AOP框架在編譯階段對程序進(jìn)行修改,即實(shí)現(xiàn)...
    數(shù)獨(dú)題閱讀 2,300評論 0 22
  • **** AOP 面向切面編程 底層原理 代理P笪@场! 今天AOP課程1凄鼻、 Spring 傳統(tǒng) AOP2腊瑟、 Spri...
    luweicheng24閱讀 1,355評論 0 1
  • 這是我在華珠導(dǎo)圖班結(jié)束后聚假,創(chuàng)作的第二幅導(dǎo)圖——《華珠導(dǎo)圖認(rèn)證班知識(shí)整理》,第一感覺就是線條好生硬闰非,導(dǎo)圖布局不美觀膘格。...
    王子市閱讀 345評論 0 0