欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析Spring IOC 依賴(lài)查找你需要知道的幾種方式

 更新時(shí)間:2021年08月17日 14:54:34   作者:越不過(guò)山丘  
這篇文章主要介紹了淺析Spring IOC 依賴(lài)查找的幾種方式,Spring是Java面試中最??嫉?,學(xué)Java的小伙伴快來(lái)看看吧

首先,我們創(chuàng)建一個(gè)包含 spring-context 依賴(lài)的 maven 項(xiàng)目,然后定義一個(gè) 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. 根據(jù) Bean 名稱(chēng)查找

實(shí)時(shí)查找

實(shí)時(shí)查找的意思就是說(shuō)直接獲取 beanFactory, 通過(guò) beanFactory 獲取 user 對(duì)應(yīng)的 bean,代碼如下所示

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

延時(shí)查找

這里的延遲就是說(shuō),通過(guò)其他的對(duì)象來(lái)獲取 user 對(duì)應(yīng)的 Bean,代碼如下所示:

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

2. 根據(jù) Bean 類(lèi)型查找

這里的類(lèi)型指的就是 user.class

單個(gè) Bean 對(duì)象

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

集合 Bean 對(duì)象

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

3. 根據(jù) Bean 類(lèi)型 + 名稱(chēng)查找

4. 根據(jù) Java 注解查找

首先我們自定義一個(gè)注解 @Super

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

將注解表示到 superUser 類(lèi)中,這里的 superUser 繼承了 user 類(lèi)

@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();
    }
}

最后根據(jù) spring 提供的 api,獲取注解 bean

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

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

相關(guān)文章

  • Java ForkJoin框架的原理及用法

    Java ForkJoin框架的原理及用法

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

    Java實(shí)現(xiàn)桌面日歷

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

    Java黑科技:replace首個(gè)替換一秒搞定

    要實(shí)現(xiàn)只替換第一個(gè)匹配項(xiàng),可以使用Java中的String類(lèi)的replaceFirst方法,該方法接受兩個(gè)參數(shù),第一個(gè)參數(shù)是要替換的字符串或正則表達(dá)式,第二個(gè)參數(shù)是替換后的字符串,需要的朋友可以參考下
    2023-10-10
  • Springboot自定義mybatis攔截器實(shí)現(xiàn)擴(kuò)展

    Springboot自定義mybatis攔截器實(shí)現(xiàn)擴(kuò)展

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

    詳談java集合框架

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

    關(guān)于SpringBoot整合Canal數(shù)據(jù)同步的問(wèn)題

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

    Java編寫(xiě)程序之輸入一個(gè)數(shù)字實(shí)現(xiàn)該數(shù)字階乘的計(jì)算

    這篇文章主要介紹了Java編寫(xiě)程序之輸入一個(gè)數(shù)字實(shí)現(xiàn)該數(shù)字階乘的計(jì)算,本文通過(guò)實(shí)例代碼給大家介紹的非常想詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 基于Java實(shí)現(xiàn)記事本功能

    基于Java實(shí)現(xiàn)記事本功能

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

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

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

    如何處理后臺(tái)向前臺(tái)傳遞的json數(shù)據(jù)

    這篇文章主要介紹了如何處理后臺(tái)向前臺(tái)傳遞的json數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論