最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring之@Lookup注解詳細解析

 更新時間:2024年01月24日 11:03:39   作者:愛上口袋的天空  
這篇文章主要介紹了Spring之@Lookup注解詳細解析,當采用@Autowired注解對單例bean注依賴的原型bean時,會由于單例bean只會創(chuàng)建一次,導致依賴的原型bean也只會注入一次,@Lookup注解可以較為優(yōu)雅的解決此類問題,需要的朋友可以參考下

1、簡介

假設(shè)一個單例的Bean A需要引用一個非單例模式的Bean B,那么在每次引用B的時候都想拿到一個新的B,該怎么做?

要知道,Bean A是單例模式的,只會被創(chuàng)建一次,注入一次屬性,也就是說,即使B是property模式,那也是只會一個相同的B,因為A只會被注入一次。

2、解決辦法

  • 讓bean A通過實現(xiàn)ApplicationContextAware來感知applicationContext(即可以獲得容器上下文),從而能在運行時通過ApplicationContext.getBean(String beanName)的方法來獲取最新的bean B
  • 使用Spring的Lookup注解

3、案例

原型B

@Component
@Scope(value = "prototype")
public class LookupTestPrototype {
}

單例A

@Component
public class LookupTestSingleton {
 
    @Autowired
    LookupTestPrototype lookupTestPrototype;
 
    public void getObjectId() {
        System.out.println("Singleton Object Id:" + this + ", Prototype Object Id : " + lookupTestPrototype);
    }
 
}

Spock測試代碼:

@ContextConfiguration(
        classes = [LookupTestSingleton.class, LookupTestPrototype.class]
)
class Spock4SpringTest extends Specification {
 
    @Resource
    LookupTestSingleton singleton;
 
    def "測試單例中使用多例的注解" () {
        setup:
            for (int i = 0; i < 10; i++) {
                println "第"+i+"次調(diào)用的結(jié)果:"
                singleton.getObjectId();
            }
    }
}

Spock測試結(jié)果:

第0次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton@b8e246c, Prototype Object Id : com.talframework.spring.LookupTestPrototype@1f387978
第1次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton@b8e246c, Prototype Object Id : com.talframework.spring.LookupTestPrototype@1f387978
第2次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton@b8e246c, Prototype Object Id : com.talframework.spring.LookupTestPrototype@1f387978
第3次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton@b8e246c, Prototype Object Id : com.talframework.spring.LookupTestPrototype@1f387978
第4次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton@b8e246c, Prototype Object Id : com.talframework.spring.LookupTestPrototype@1f387978
第5次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton@b8e246c, Prototype Object Id : com.talframework.spring.LookupTestPrototype@1f387978
第6次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton@b8e246c, Prototype Object Id : com.talframework.spring.LookupTestPrototype@1f387978
第7次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton@b8e246c, Prototype Object Id : com.talframework.spring.LookupTestPrototype@1f387978
第8次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton@b8e246c, Prototype Object Id : com.talframework.spring.LookupTestPrototype@1f387978
第9次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton@b8e246c, Prototype Object Id : com.talframework.spring.LookupTestPrototype@1f387978

使用@Lookup改動的單例A代碼如下:

@Component
public abstract class LookupTestSingleton {
 
    @Lookup
    public abstract LookupTestPrototype lookupTestPrototype ();
 
    public void getObjectId() {
        System.out.println("Singleton Object Id:" + this + ", Prototype Object Id : " + lookupTestPrototype());
    }
 
}

調(diào)用的結(jié)果如下:

第0次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton$$EnhancerBySpringCGLIB$$15adeab8@3be4fcc0, Prototype Object Id : com.talframework.spring.LookupTestPrototype@661c46bc
第1次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton$$EnhancerBySpringCGLIB$$15adeab8@3be4fcc0, Prototype Object Id : com.talframework.spring.LookupTestPrototype@37864b77
第2次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton$$EnhancerBySpringCGLIB$$15adeab8@3be4fcc0, Prototype Object Id : com.talframework.spring.LookupTestPrototype@2b98b3bb
第3次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton$$EnhancerBySpringCGLIB$$15adeab8@3be4fcc0, Prototype Object Id : com.talframework.spring.LookupTestPrototype@540b0448
第4次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton$$EnhancerBySpringCGLIB$$15adeab8@3be4fcc0, Prototype Object Id : com.talframework.spring.LookupTestPrototype@50a691d3
第5次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton$$EnhancerBySpringCGLIB$$15adeab8@3be4fcc0, Prototype Object Id : com.talframework.spring.LookupTestPrototype@557eb543
第6次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton$$EnhancerBySpringCGLIB$$15adeab8@3be4fcc0, Prototype Object Id : com.talframework.spring.LookupTestPrototype@3b95d13c
第7次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton$$EnhancerBySpringCGLIB$$15adeab8@3be4fcc0, Prototype Object Id : com.talframework.spring.LookupTestPrototype@3730ab42
第8次調(diào)用的結(jié)果:
Singleton Object Id:com.talframework.spring.LookupTestSingleton$$EnhancerBySpringCGLIB$$15adeab8@3be4fcc0, Prototype Object Id : com.talframework.spring.LookupTestPrototype@537c8c7e
第9次調(diào)用的結(jié)果:

需要注意的是@Lookup只能注解在方法上,這個時候可以注解在一個抽象方法上。

到此這篇關(guān)于Spring之@Lookup注解詳細解析的文章就介紹到這了,更多相關(guān)@Lookup注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • NetBeans安裝提示neatbeans cannot find java 1.8 or higher

    NetBeans安裝提示neatbeans cannot find java 1.8 or higher

    今天小編就為大家分享一篇關(guān)于NetBeans安裝提示neatbeans cannot find java 1.8 or higher,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Java實現(xiàn)雪花算法的原理

    Java實現(xiàn)雪花算法的原理

    這篇文章主要介紹了Java實現(xiàn)雪花算法的原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • IntelliJ IDEA全局內(nèi)容搜索和替換教程圖解

    IntelliJ IDEA全局內(nèi)容搜索和替換教程圖解

    很多朋友在做項目時,會在整個項目里活指定文件夾下進行全局搜索和替換,下面小編給大家?guī)砹薎ntelliJ IDEA全局內(nèi)容搜索和替換教程圖解,需要的朋友參考下吧
    2018-04-04
  • Java流程控制break和continue

    Java流程控制break和continue

    這篇文章主要介紹了Java流程控制break和continue,下面文章圍繞break和continue的相關(guān)資料展開詳細內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2021-12-12
  • springboot?集成dubbo的步驟詳解

    springboot?集成dubbo的步驟詳解

    這篇文章主要介紹了springboot?簡易集成dubbo的步驟詳解,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 關(guān)于Nacos配置管理的統(tǒng)一配置管理、自動刷新詳解

    關(guān)于Nacos配置管理的統(tǒng)一配置管理、自動刷新詳解

    這篇文章主要介紹了關(guān)于Nacos配置管理的統(tǒng)一配置管理、自動刷新詳解,Nacos是阿里的一個開源產(chǎn)品,是針對微服務(wù)架構(gòu)中的服務(wù)發(fā)現(xiàn)、配置管理、服務(wù)治理的綜合型解決方案,需要的朋友可以參考下
    2023-05-05
  • IDEA中配置Python環(huán)境并運行方式

    IDEA中配置Python環(huán)境并運行方式

    本文介紹了在Mac和Windows平臺上安裝Python環(huán)境的方法,并詳細講解了如何在IntelliJ IDEA中安裝Python插件、創(chuàng)建Python工程和運行Python文件,同時,還提到了一些常用的Python框架,如Django、Google App Engine和SQL支持
    2025-03-03
  • java 注解實現(xiàn)一個可配置線程池的方法示例

    java 注解實現(xiàn)一個可配置線程池的方法示例

    這篇文章主要介紹了java 注解實現(xiàn)一個可配置線程池的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • JDBC之PreparedStatement類中預編譯的綜合應(yīng)用解析

    JDBC之PreparedStatement類中預編譯的綜合應(yīng)用解析

    SQL 語句被預編譯并存儲在 PreparedStatement 對象中。然后可以使用此對象多次高效地執(zhí)行該語句
    2013-07-07
  • mybatis使用foreach標簽進行嵌套插入

    mybatis使用foreach標簽進行嵌套插入

    數(shù)據(jù)庫插入操作常見于多層架構(gòu)設(shè)計中,本文提供了一個具體的實現(xiàn)方案,涉及三層實體類結(jié)構(gòu),第一層實體類負責基本數(shù)據(jù)結(jié)構(gòu)的定義,第二層和第三層實體類則提供更詳細的業(yè)務(wù)邏輯處理,同時,文章還介紹了相應(yīng)的mapper接口和配置文件設(shè)置
    2024-09-09

最新評論

内黄县| 曲松县| 汽车| 黄浦区| 色达县| 桂东县| 巴林右旗| 东乌珠穆沁旗| 会泽县| 镇康县| 镇远县| 郁南县| 临沂市| 吉林市| 阿瓦提县| 玉田县| 镇巴县| 大英县| 大新县| 宜黄县| 多伦县| 女性| 宣汉县| 阳高县| 陇川县| 奉新县| 兰溪市| 轮台县| 贵南县| 汉寿县| 利辛县| 乌恰县| 衡阳市| 宁夏| 九寨沟县| 分宜县| 灵山县| 莱西市| 昌江| 大田县| 曲阜市|