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

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

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

首先,我們創(chuàng)建一個(gè)包含 spring-context 依賴的 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 名稱查找

實(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,即名稱實(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 類型查找

這里的類型指的就是 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("集合類型:" + beansOfType);
 }

3. 根據(jù) Bean 類型 + 名稱查找

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

首先我們自定義一個(gè)注解 @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();
    }
}

最后根據(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 依賴查找你需要知道的幾種方式的文章就介紹到這了,更多相關(guān)Spring IOC 依賴查找內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

鲁山县| 沭阳县| 临夏市| 习水县| 会泽县| 江口县| 郯城县| 卢龙县| 桐乡市| 临潭县| 陕西省| 马边| 黄冈市| 凉城县| 松桃| 丹寨县| 浦城县| 仁化县| 黄陵县| 尖扎县| 奉新县| 海晏县| 临沭县| 广西| 托克托县| 炉霍县| 蓬莱市| 庆阳市| 通榆县| 绥江县| 古浪县| 石门县| 阿拉善左旗| 石城县| 宣化县| 满城县| 新沂市| 贵定县| 丹寨县| 安图县| 呼伦贝尔市|