Java Spring中的動(dòng)態(tài)代理cglib

總結(jié)

JDK的動(dòng)態(tài)代理和 Spring中的動(dòng)態(tài)代理cglib區(qū)別
  • JDK 的動(dòng)態(tài)代理 :針對(duì)實(shí)現(xiàn)了接口的類產(chǎn)生代理.
  • Cglib 的動(dòng)態(tài)代理 :針對(duì)沒有實(shí)現(xiàn)接口的類產(chǎn)生代理. 通過生成實(shí)現(xiàn)類類的子類對(duì)象來產(chǎn)生代理.

1.什么是動(dòng)態(tài)代理技術(shù)

1.1 動(dòng)態(tài)代理技術(shù)是面向切面編程的一種思想(aop)僚饭。
1.2 思想模型
Snip20180605_22.png

2.動(dòng)態(tài)代理技術(shù)的好處

可以動(dòng)態(tài)的在B實(shí)現(xiàn)類的doSomething()方法前后晕讲,添加一些其他的操作方法,對(duì)方法進(jìn)行增強(qiáng)狼犯。

3.案例講解

3.1 場(chǎng)景模擬

在操作數(shù)據(jù)庫之前羊异,我們都需要開啟事物济舆,當(dāng)操作完畢之后還要提交事物贰锁,但是如果在每一個(gè)操作數(shù)據(jù)庫的方法中都要調(diào)用一次的話就會(huì)顯得很繁瑣了,所以我們?cè)趧?dòng)態(tài)代理中統(tǒng)一進(jìn)行處理省核。

3.2 代碼演示

3.2.1 準(zhǔn)備一個(gè)接口

public interface UserService {
    void save();
    void delete();
    void update();
    void find();
}

3.2.2 準(zhǔn)備一個(gè)實(shí)現(xiàn)類

package cn.jianghai.service;

public class UserServiceImpl implements UserService{

    @Override
    public void save() {
        System.out.println("保存用戶!");
    }
    @Override
    public void delete() {
        System.out.println("刪除用戶!");
    }
    @Override
    public void update() {
        System.out.println("更新用戶!");
    }
    @Override
    public void find() {
        System.out.println("查找用戶!");
    }
}

3.2.3 準(zhǔn)備一個(gè)動(dòng)態(tài)代理類

public class UserServiceProxyFactory implements MethodInterceptor {

    public UserService getUserServiceProxy() {
        Enhancer enhancer = new Enhancer(); //幫我們生成代理對(duì)象
        enhancer.setSuperclass(UserServiceImpl.class); // //設(shè)置對(duì)誰進(jìn)行代理
        enhancer.setCallback(this); // 設(shè)置代理回調(diào)方法
        UserService userService = (UserService) enhancer.create(); //創(chuàng)建代理對(duì)象
        return userService;
    }


    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        //打開事務(wù)
        System.out.println("打開事務(wù)!");
        //調(diào)用原有方法
        Object returnValue = methodProxy.invokeSuper(o, objects);
        //提交事務(wù)
        System.out.println("提交事務(wù)!");

        return returnValue;
    }
}

3.2.4 測(cè)試


public class Demo {
    @Test
    public void func(){

        UserServiceProxyFactory userServiceProxyFactory = new UserServiceProxyFactory();
        UserService userServiceProxy = userServiceProxyFactory.getUserServiceProxy();
        userServiceProxy.save();

        //判斷代理對(duì)象是否屬于被代理對(duì)象類型
        //代理對(duì)象繼承了被代理對(duì)象=>true
        System.out.println(userServiceProxy instanceof UserServiceImpl);//true
    }
}


查看測(cè)試結(jié)果


Snip20180605_25.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市昆码,隨后出現(xiàn)的幾起案子气忠,更是在濱河造成了極大的恐慌,老刑警劉巖赋咽,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旧噪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡脓匿,警方通過查閱死者的電腦和手機(jī)淘钟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陪毡,“玉大人米母,你說我怎么就攤上這事$凸牵” “怎么了爱咬?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绊起。 經(jīng)常有香客問我精拟,道長(zhǎng),這世上最難降的妖魔是什么虱歪? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任蜂绎,我火速辦了婚禮,結(jié)果婚禮上笋鄙,老公的妹妹穿的比我還像新娘师枣。我一直安慰自己,他們只是感情好萧落,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布践美。 她就那樣靜靜地躺著,像睡著了一般找岖。 火紅的嫁衣襯著肌膚如雪陨倡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天许布,我揣著相機(jī)與錄音兴革,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛杂曲,可吹牛的內(nèi)容都是我干的庶艾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼擎勘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼咱揍!你這毒婦竟也來了彤叉?” 一聲冷哼從身側(cè)響起士败,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎译断,沒想到半個(gè)月后蟹地,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體积暖,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年怪与,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夺刑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡分别,死狀恐怖遍愿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耘斩,我是刑警寧澤沼填,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站括授,受9級(jí)特大地震影響坞笙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荚虚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一薛夜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧版述,春花似錦梯澜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俭茧,卻和暖如春咆疗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恢恼。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胰默,地道東北人场斑。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓漓踢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親漏隐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子喧半,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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

  • 關(guān)于動(dòng)態(tài)代理和靜態(tài)代理 當(dāng)一個(gè)對(duì)象(客戶端)不能或者不想直接引用另一個(gè)對(duì)象(目標(biāo)對(duì)象),這時(shí)可以應(yīng)用代理模式在這兩...
    carway閱讀 4,864評(píng)論 2 26
  • 參考資料:菜鳥教程之設(shè)計(jì)模式 設(shè)計(jì)模式概述 設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐青责,通常被有經(jīng)驗(yàn)...
    Steven1997閱讀 1,176評(píng)論 1 12
  • 從三月份找實(shí)習(xí)到現(xiàn)在挺据,面了一些公司,掛了不少脖隶,但最終還是拿到小米扁耐、百度、阿里产阱、京東婉称、新浪、CVTE构蹬、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,277評(píng)論 11 349
  • 深夜王暗,都喜歡用食療一詞,年輕人就不該用這個(gè)詞庄敛,消極之意漸濃俗壹。 國(guó)慶的七天,過得似乎就消極了點(diǎn)兒藻烤,因?yàn)槊撾x了書本绷雏,便...
    木子言寺月閱讀 550評(píng)論 0 0
  • 像我 以愛的名義 發(fā)給她讓她學(xué)習(xí)的東西 自一省 控制情緒語言行為
    伊晨xl閱讀 228評(píng)論 0 0