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

淺析Spring IOC 依賴查找你需要知道的幾種方式

 更新時間:2021年08月17日 14:54:34   作者:越不過山丘  
這篇文章主要介紹了淺析Spring IOC 依賴查找的幾種方式,Spring是Java面試中最常考的,學Java的小伙伴快來看看吧

首先,我們創(chuàng)建一個包含 spring-context 依賴的 maven 項目,然后定義一個 User.class

public class User {

    private long id;
    private String name;

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
 }

在 resources 目錄下,創(chuàng)建 dependency-look-up.xml 配置文件

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


    <bean id = "user" class="org.example.overview.dependency.domain.User">
        <property name="id" value="1"/>
        <property name="name" value="彭于晏"/>
    </bean>

    <bean id="superUser" class="org.example.overview.dependency.domain.SuperUser" parent="user"
          primary="true">
        <property name="address" value="杭州"/>
    </bean>

    <bean id="objectFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
        <property name="targetBeanName" value="user"/>
    </bean>

</beans>

1. 根據 Bean 名稱查找

實時查找

實時查找的意思就是說直接獲取 beanFactory, 通過 beanFactory 獲取 user 對應的 bean,代碼如下所示

 BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath:/META-INF/dependency-look-up.xml");
// 這里的 “user” 就是 xml 文件中的 id,即名稱實時查找                
User user = (User) beanFactory.getBean("user");
System.out.println("實時加載: " + bean);

延時查找

這里的延遲就是說,通過其他的對象來獲取 user 對應的 Bean,代碼如下所示:

ObjectFactory<User> objectFactory = (ObjectFactory<User>) beanFactory.getBean("objectFactory");
User user = objectFactory.getObject();
System.out.println("延遲加載" + user);

2. 根據 Bean 類型查找

這里的類型指的就是 user.class

單個 Bean 對象

User bean = beanFactory.getBean(User.class);

集合 Bean 對象

if(beanFactory  instanceof ListableBeanFactory){
      ListableBeanFactory listableBeanFactory = (ListableBeanFactory)beanFactory;
      Map<String, User> beansOfType = listableBeanFactory.getBeansOfType(User.class);
      System.out.println("集合類型:" + beansOfType);
 }

3. 根據 Bean 類型 + 名稱查找

4. 根據 Java 注解查找

首先我們自定義一個注解 @Super

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Super {
}

將注解表示到 superUser 類中,這里的 superUser 繼承了 user 類

@Super
public class SuperUser extends User {

    private String address;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "SuperUser{" +
                "address='" + address + '\'' +
                "} " + super.toString();
    }
}

最后根據 spring 提供的 api,獲取注解 bean

 if(beanFactory  instanceof ListableBeanFactory){
       ListableBeanFactory listableBeanFactory = (ListableBeanFactory)beanFactory;
       Map<String, Object> beansOfType = listableBeanFactory.getBeansWithAnnotation(Super.class);
       System.out.println("查找 @super 的:" + beansOfType);
 }

到此這篇關于淺析Spring IOC 依賴查找你需要知道的幾種方式的文章就介紹到這了,更多相關Spring IOC 依賴查找內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA開發(fā)常用類庫UUID、Optional、ThreadLocal、TimerTask、Base64使用方法與實例詳解

    JAVA開發(fā)常用類庫UUID、Optional、ThreadLocal、TimerTask、Base64使用方法與實例詳

    這篇文章主要介紹了JAVA開發(fā)常用類庫UUID、Optional、ThreadLocal、TimerTask、Base64使用方法與實例詳解,需要的朋友可以參考下
    2020-02-02
  • 使用Mybatis如何實現刪除多個數據

    使用Mybatis如何實現刪除多個數據

    這篇文章主要介紹了使用Mybatis如何實現刪除多個數據,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Tomcat 多端口 多應用

    Tomcat 多端口 多應用

    當你使用Tomcat作為Web Server的時候,是不是會想過這樣的一個問題:如何利用Tomcat建立兩個Web Server,同時偵聽來自不同端口的請求呢?要實現這一點是很簡單的。以下假設Tomcat安裝在D:/Tomcat5.0目錄下。
    2008-02-02
  • springboot中使用groovy的示例代碼

    springboot中使用groovy的示例代碼

    Groovy就是一種繼承了動態(tài)語言的優(yōu)良特性并運行在JVM上的編程語言,Groovy支持動態(tài)輸入,閉包,元編程,運算符重載等等語法,這篇文章主要介紹了springboot中使用groovy的相關知識,需要的朋友可以參考下
    2022-09-09
  • spring啟動后保證創(chuàng)建的對象不被垃圾回收器回收

    spring啟動后保證創(chuàng)建的對象不被垃圾回收器回收

    最近看到一個問題是,spring在啟動后如何保證創(chuàng)建的對象不被垃圾回收器回收?。所以本文結合jvm的垃圾回收機制和spring中的源代碼做出自己的一點猜測。有需要的朋友們可以參考借鑒。
    2016-09-09
  • Java通過MyBatis框架對MySQL數據進行增刪查改的基本方法

    Java通過MyBatis框架對MySQL數據進行增刪查改的基本方法

    MyBatis框架由Java的JDBC API進一步封裝而來,在操作數據庫方面效果拔群,接下來我們就一起來看看Java通過MyBatis框架對MySQL數據進行增刪查改的基本方法:
    2016-06-06
  • springboot post接口接受json時,轉換為對象時,屬性都為null的解決

    springboot post接口接受json時,轉換為對象時,屬性都為null的解決

    這篇文章主要介紹了springboot post接口接受json時,轉換為對象時,屬性都為null的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式)

    SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式)

    這篇文章主要介紹了SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java使用Sftp和Ftp實現對文件的上傳和下載

    Java使用Sftp和Ftp實現對文件的上傳和下載

    這篇文章主要介紹了Java使用Sftp和Ftp實現對文件的上傳和下載,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Springboot的yml配置文件用法

    Springboot的yml配置文件用法

    這篇文章主要介紹了Springboot的yml配置文件用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

新昌县| 宁远县| 沙河市| 龙岩市| 旬邑县| 许昌市| 罗平县| 滦平县| 临泽县| 屏南县| 北流市| 永昌县| 石嘴山市| 榕江县| 玉田县| 天水市| 太和县| 邓州市| 新营市| 门头沟区| 囊谦县| 河北区| 博罗县| 孝感市| 文水县| 从化市| 赤壁市| 济南市| 阿城市| 托克逊县| 芒康县| 蓬溪县| 古丈县| 深泽县| 镇原县| 黑水县| 容城县| 汶川县| 固原市| 香河县| 石渠县|