怎么通过类型来获取 bean以及为什么可以通过构造器配置 bean

简介: 怎么通过类型来获取 bean以及为什么可以通过构造器配置 bean

😀前言

本片文章是spring基于XML 配置bean系类中第1篇Spring 配置/管理bean 介绍和基于 XML 配置 bean中的怎么通过类型来获取 bean以及为什么可以通过构造器配置 bean

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

 

🥰spring基于XML 配置bean

🐳通过类型来获取 bean

😘应用案例
  • 通过 spring 的ioc 容器, 获取一个bean 对象
  • 获取 bean 的方式:按类型

🍀完成步骤

1.创建Monster.java ,

注意

无参构造器一定要写,Spring反射创建对象时,需要使用

public class Monster {
    private Integer monsterId;
    private String name;
    private String skill;
    //全参构造器
    public Monster(Integer monsterId, String name, String skill) {
        this.monsterId = monsterId;
        this.name = name;
        this.skill = skill;
    }
    //无参构造器一定要写,Spring反射创建对象时,需要使用
    public Monster() {
    }
    public Integer getMonsterId() {
        return monsterId;
    }
    public void setMonsterId(Integer monsterId) {
        this.monsterId = monsterId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }
    @Override
    public String toString() {
        return "Monster{" +
                "monsterId=" + monsterId +
                ", name='" + name + '\'' +
                ", skill='" + skill + '\'' +
                '}';
    }
}

2.在beans.xml 配置(说明前面已经配置好了)

    <bean id="monster01" class="com.wyxedu.spring.beans.Monster">
        <property name="monsterId" value="1"/>
        <property name="name" value="牛魔王"/>
        <property name="skill" value="牛魔王拳"/>
    </bean>

3.完成测试: 修改Spring5BeanTest.java, 通过类型来获取bean 对象

    public void getBeanByType() {
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("beans.xml");
        //,直接传入class对象/类型
        Monster bean = ioc.getBean(Monster.class);
        System.out.println("bean=" + bean);
    }

🍑细节说明

1.按类型来获取 bean, 要求 ioc 容器中的同一个类的 bean 只能有一个,

否则会抛出异常 NoUniqueBeanDefinitionException

2.这种方式的应用场景:

比如 XxxAction/Servlet/Controller, 或 XxxService 在一个线程中只需要一个对象实例(单例)的情况

3.这里在说明一下:

在容器配置文件(比如 beans.xml)中给属性赋值, 底层是通过setter 方法完成的, 这也是为什么我们需要提供 setter 方法的原因

🐳通过构造器配置 bean

😘应用案例

案例说明

在spring 的ioc 容器, 可以通过构造器来配置bean 对象

🍀完成步骤

在beans.xml 配置

  1. constructor-arg标签可以指定使用构造器的参数
  2. index表示构造器的第几个参数 从0开始计算的
  3. 除了可以通过index 还可以通过 name / type 来指定参数方式
  4. 解除大家的疑惑, 类的构造器,不能有完全相同类型和顺序的构造器,所以可以通过type来指定
<!--配置Monster对象,并且指定构造器
    解读
    1. constructor-arg标签可以指定使用构造器的参数
    2. index表示构造器的第几个参数 从0开始计算的
    3. 除了可以通过index 还可以通过 name / type 来指定参数方式
    4. 解除大家的疑惑, 类的构造器,不能有完全相同类型和顺序的构造器,所以可以通过type来指定
    -->
    <bean id="monster03" class="com.spring.bean.Monster">
        <constructor-arg value="200" index="0"/>
        <constructor-arg value="白骨精" index="1"/>
        <constructor-arg value="吸人血" index="2"/>
    </bean>
    <bean id="monster04" class="com.spring.bean.Monster">
        <constructor-arg value="200" name="monsterId"/>
        <constructor-arg value="白骨精" name="name"/>
        <constructor-arg value="吸人血" name="skill"/>
    </bean>
    <bean id="monster05" class="com.spring.bean.Monster">
        <constructor-arg value="300" type="java.lang.Integer"/>
        <constructor-arg value="白骨精~" type="java.lang.String"/>
        <constructor-arg value="吸人血~" type="java.lang.String"/>
    </bean>

2.完成测试: 修改Spring5BeanTest.java, 增加测试方法.

    public void setBeanByConstructor() {
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("beans.xml");
        Monster monster03 = ioc.getBean("monster03", Monster.class);
        System.out.println("monster03=" + monster03);
    }

使用细节

  1. 通过 index 属性来区分是第几个参数
  2. 通过 type 属性来区是什么类型(按照顺序)

😄总结

本篇详细的讲解了spring基于XML 配置bean中的怎么通过类型来获取 bean

以及为什么可以通过构造器配置 bean加代码演示


文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁

希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻

如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞


目录
相关文章
|
前端开发 Java 数据库连接
Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换
Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换
|
SQL 存储 运维
Flyway基本介绍及基本使用
使用5W1H方式介绍一下在Java项目开发中使用Flyway来管理数据库版本。。
10074 0
Flyway基本介绍及基本使用
|
21天前
|
人工智能 前端开发 JavaScript
前端实现多方言实时转写:VAD端点检测+流式ASR接入,识别准确率提升300%
本文面向前端工程师,详解多方言中文自动语音识别(ASR)的完整落地接入方案,涵盖录音采集、音质增强、编码传输、流式识别、结果合并等关键技术环节,助力实现“即录即识、边说边出字”的实时交互体验。
|
3月前
|
JSON 数据格式
本地部署的qwen3-8b模型和百炼上的qwen3-8b模型效果不一致
我在使用Function Call时发现,百炼平台上的Qwen3-8B模型与本地部署的Qwen3-8B模型效果存在差异,主要体现在函数参数生成上,本地模型常出现漏参或JSON格式错误,而百炼模型表现正常。想确认百炼平台的Qwen3-8B是否为更高版本?
|
算法 NoSQL Java
springboot整合redis及lua脚本实现接口限流
springboot整合redis及lua脚本实现接口限流
459 0
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【9月更文挑战第10天】随着软件应用的不断扩展,性能测试成为确保系统稳定运行的关键环节。本文通过对比Apache JMeter和Locust,探讨了如何在Python环境中利用这两款工具挖掘更多性能测试潜力。JMeter是一款成熟且功能强大的开源工具,支持多种协议,适用于各种应用的测试;而Locust则基于Python,通过简单脚本模拟HTTP请求,更适合Web应用测试。
283 3
|
应用服务中间件 nginx
nginx动静分类,静态资源放到nginx中
这篇文章介绍了如何将项目中的静态资源部署到Nginx服务器中,包括将静态资源移动到Nginx目录、删除项目中的静态资源、替换静态资源访问路径、检查页面情况、修改Nginx配置文件以及重启Nginx查看效果的详细步骤。
nginx动静分类,静态资源放到nginx中
|
NoSQL Java Redis
Spring Boot与Redisson的集成
Spring Boot与Redisson的集成
|
druid Java 关系型数据库
在Spring Boot中集成Druid实现多数据源有两种常用的方式:使用Spring Boot的自动配置和手动配置。
在Spring Boot中集成Druid实现多数据源有两种常用的方式:使用Spring Boot的自动配置和手动配置。
2524 5
|
存储 算法 C语言
芯片验证 | SystemVerilog使用简介
芯片验证 | SystemVerilog使用简介
400 0