1. 依賴查找

簡(jiǎn)介

以下內(nèi)容為學(xué)習(xí) Spring 教材后的知識(shí)點(diǎn)總結(jié),方便個(gè)人復(fù)習(xí) Spring 相關(guān)知識(shí)使用。并不適合入門學(xué)習(xí)。
Spring 可通過如下方式查找 Bean

  1. 通過 Bean 名稱查找(實(shí)時(shí)、延遲)
  2. 通過 Bean 類型查找(單個(gè)、集合)
  3. 通過注解查找
    注:以上方式又可以分為: 實(shí)時(shí)查找、延遲查找、查找單個(gè) Bean、查找集合 Bean。

實(shí)例

// 定義 1 個(gè)注解,兩個(gè) Java 類
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Super {
}

public class User {
    private Long id;
    private String name;
    // 省略 getter and setter
}

@Super
public class SuperUser extends User {
    private String address;
    // 省略 getter and setter
}
    <!-- 定義 Spring 配置文件 -->
    <bean id="user" class="demo.User" lazy-init="true">
        <property name="id" value="1"/>
        <property name="name" value="karson"/>
    </bean>
    <bean id="objectFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
        <property name="targetBeanName" value="user"/><!-- value="user" 引用前面定義的 id="user" 的 Bean-->
    </bean>
    <bean id="superUser" class="demo.SuperUser" parent="user" primary="true">
        <property name="address" value="北京"/>
    </bean>
        // 通過以上準(zhǔn)備,開始演示相關(guān)源碼
        // 通過 xml 文件創(chuàng)建 BeanFactory。
        BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath:/META-INF/spring-config.xml");
        // 1. 通過 Bean 名稱實(shí)時(shí)查找單個(gè) Bean。
        // 如設(shè)置 lazy-init="true",首次調(diào)用 getBean 才初始化 User 對(duì)象
        User userByName = (User) beanFactory.getBean("user");  

        // 2. 通過 Bean 類型實(shí)時(shí)查找單個(gè) Bean。
        User userByType = beanFactory.getBean(User.class);
        
        // 3. 通過 ObjectFactory 查找單個(gè) Bean。
        ObjectFactory<User> objectFactory = (ObjectFactory<User>) beanFactory.getBean("objectFactory");
        User user = objectFactory.getObject();

        if (beanFactory instanceof ListableBeanFactory) {
            ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
            // 4. 通過 Bean 類型查找 Bean 集合。
            Map<String, User> users = listableBeanFactory.getBeansOfType(User.class);
            // 5. 通過注解查找單個(gè) Bean。
            Map<String, User> users = (Map) listableBeanFactory.getBeansWithAnnotation(Super.class);
        }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring IoC依賴查找類型如下: 根據(jù)Bean名稱(id)查找,在Spring的一個(gè)上下文中,名稱(id)必...
    技術(shù)路上的絆腳石閱讀 272評(píng)論 0 0
  • Spring依賴查找和依賴注入 演示簡(jiǎn)單的Bean工廠環(huán)境,使用Xml進(jìn)行相關(guān)Bean的配置 定義兩個(gè)簡(jiǎn)單的POJ...
    just_like_you閱讀 1,632評(píng)論 0 0
  • 歡迎關(guān)注公眾號(hào)“Tim在路上” 1.聽說你對(duì)JVM有點(diǎn)研究,講一講JVM的內(nèi)存模型吧(我說虛擬機(jī)棧,本地方法棧,程...
    Tim在路上閱讀 3,943評(píng)論 4 91
  • 內(nèi)存模型以及分區(qū) JVM分為虛擬機(jī)棧、堆、方法區(qū)、本地方法區(qū)堆,用來存放實(shí)例化對(duì)象、非static成員變量,屬于線...
    北京黃小胖閱讀 1,454評(píng)論 0 0
  • JVM 說一下 jvm 的主要組成部分?及其作用? JVM包括類加載子系統(tǒng)、堆、方法區(qū)、棧、本地方法棧、程序計(jì)數(shù)器...
    文刀雨木同閱讀 636評(píng)論 0 1

友情鏈接更多精彩內(nèi)容