设为首页 加入收藏

TOP

day04-Spring管理Bean-IOC-02(四)
2023-07-25 21:42:13 】 浏览:72
Tags:day04-Spring 管理 Bean-IOC-02
nster02 = ioc.getBean("my_monster02", Monster.class); System.out.println("my_monster02=" + my_monster02); // 这里使用相同的id获取bean,那么返回的对象也是同一个!! Monster my_monster002 = ioc.getBean("my_monster02", Monster.class); // 因为虽然是实例工厂,但是两次 ioc.getBean("my_monster02", Monster.class)使用的都是 // 同一个工厂实例(id="myInstanceFactory"),返回的自然也就是同一个实例工厂中的 monster System.out.println(my_monster02 == my_monster002);//true //换而言之,如果不是同一个实例工厂,那么返回的就不是同一个对象了 //(这里的my_monster03,在beans.xml使用的是 id=myInstanceFactory02的实例工厂) Monster my_monster03 = ioc.getBean("my_monster03", Monster.class); System.out.println("my_monster03=" + my_monster03); System.out.println(my_monster02 == my_monster03);//false } image-20230117180247575

2.11通过FactoryBean获取对象(重点)

在spring的ioc容器,通过FactoryBean获取bean对象

MyFactoryBean:

package com.li.factory;

import com.li.bean.Monster;
import org.springframework.beans.factory.FactoryBean;

import java.util.HashMap;
import java.util.Map;

/**
 * @author 李
 * @version 1.0
 * FactoryBean
 */
public class MyFactoryBean implements FactoryBean<Monster> {
    //这个就是你配置的时候,指定要获取的对象对应的key
    private String key;
    private Map<String, Monster> monster_map;

    //代码块完成初始化
    {
        monster_map = new HashMap<>();
        monster_map.put("monster05", new Monster(5, "黑风怪", "翻江倒海"));
        monster_map.put("monster06", new Monster(6, "金角大王", "超能力"));
    }

    public void setKey(String key) {
        this.key = key;
    }

    @Override
    public Monster getObject() throws Exception {
        return monster_map.get(key);
    }

    @Override
    public Class<?> getObjectType() {
        return Monster.class;
    }

    @Override
    public boolean isSingleton() {//这里指定是否是单例对象
        return true;
    }
}

beans.xml:

<!--配置monster对象,通过FactoryBean来获取
    1.这里的class 指定要使用的FactoryBean
    2.key是 你设置的FactoryBean的属性key
    3.value 就是你要获取的对象的对应 key
    -->
<bean id="my_monster05" class="com.li.factory.MyFactoryBean">
    <property name="key" value="monster05"/>
</bean>

测试类:

//通过FactoryBean获取bean对象
@Test
public void getBeanByFactoryBean() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
    Monster my_monster05 = ioc.getBean("my_monster05", Monster.class);
    System.out.println("my_monster05=" + my_monster05);
}
image-20230117185118543

2.12bean配置信息重用(继承)

在spring的ioc容器中,提供了一种继承的方式来实现bean配置信息的重用

beans.xml:

<!--配置Monster对象-->
<bean class="com.li.bean.Monster" id="monster10">
    <property name="monsterId" value="10"/>
    <property name="name" value="蜈蚣精"/>
    <property name="skill" value="蜇人"/>
</bean>

<!--现在配置另一个Monster对象,
    1.这个对象的属性值 和 id="monster10"对象属性一样
    2.parent="monster10" 指定当前这个配置的对象的属性值从id=monster10的对象来
    -->
<bean id="monster11" class="com.li.bean.Monster" parent="monster10"/>

测试类:

//配置Bean(通过继承)
@Test
public void getBeanByFactoryBean() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
    Monster monster10 = ioc.getBean("
首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用 Elasticsearch 搭建自己的搜.. 下一篇gRPC之初体验

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目