亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

首先,我們創(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 ForkJoin框架的原理及用法

    Java ForkJoin框架的原理及用法

    這篇文章主要介紹了Java ForkJoin框架的原理及用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java實現桌面日歷

    Java實現桌面日歷

    這篇文章主要為大家詳細介紹了Java實現桌面日歷,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java黑科技:replace首個替換一秒搞定

    Java黑科技:replace首個替換一秒搞定

    要實現只替換第一個匹配項,可以使用Java中的String類的replaceFirst方法,該方法接受兩個參數,第一個參數是要替換的字符串或正則表達式,第二個參數是替換后的字符串,需要的朋友可以參考下
    2023-10-10
  • Springboot自定義mybatis攔截器實現擴展

    Springboot自定義mybatis攔截器實現擴展

    本文主要介紹了Springboot自定義mybatis攔截器實現擴展,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 詳談java集合框架

    詳談java集合框架

    這篇文章主要介紹了詳談java集合框架 ,需要的朋友可以參考下
    2015-05-05
  • 關于SpringBoot整合Canal數據同步的問題

    關于SpringBoot整合Canal數據同步的問題

    大家都知道canal是阿里巴巴旗下的一款開源工具,純java開發(fā),支持mysql數據庫,本文給大家介紹SpringBoot整合Canal數據同步的問題,需要的朋友可以參考下
    2022-03-03
  • Java編寫程序之輸入一個數字實現該數字階乘的計算

    Java編寫程序之輸入一個數字實現該數字階乘的計算

    這篇文章主要介紹了Java編寫程序之輸入一個數字實現該數字階乘的計算,本文通過實例代碼給大家介紹的非常想詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 基于Java實現記事本功能

    基于Java實現記事本功能

    這篇文章主要為大家詳細介紹了基于Java實現記事本功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Springboot?引入?Redis?并配置序列化并封裝RedisTemplate?

    Springboot?引入?Redis?并配置序列化并封裝RedisTemplate?

    這篇文章主要介紹了Springboot?引入?Redis?并配置序列化并封裝RedisTemplate。文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 如何處理后臺向前臺傳遞的json數據

    如何處理后臺向前臺傳遞的json數據

    這篇文章主要介紹了如何處理后臺向前臺傳遞的json數據,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02

最新評論