😀前言
本片文章是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 配置
- constructor-arg标签可以指定使用构造器的参数
- index表示构造器的第几个参数 从0开始计算的
- 除了可以通过index 还可以通过 name / type 来指定参数方式
- 解除大家的疑惑, 类的构造器,不能有完全相同类型和顺序的构造器,所以可以通过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); }
使用细节
- 通过 index 属性来区分是第几个参数
- 通过 type 属性来区是什么类型(按照顺序)
😄总结
本篇详细的讲解了spring基于XML 配置bean中的怎么通过类型来获取 bean
以及为什么可以通过构造器配置 bean加代码演示
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞