Spring Xml装配Bean的思路详解

 更新时间:2021年10月31日 09:49:25   作者:千木成林  
在Spring中提供了三种方式来对Bean进行配置,本文针对每种方式给大家介绍的非常详细,对Spring Xml装配Bean的思路相关知识感兴趣的朋友一起看看吧

1,概述

在Spring中提供了三种方式来对Bean进行配置:

在xml文件中配置在Java的接口和实现类中配置隐式Bean的发现机制和自动装配原则
这三种方式都经常用到,而且常常会混合使用。这篇先写xml装配Bean。

2,分析bean标签

<bean id="pserson" class="com.xl.spring.xlIoc.beans.Person">
    <property name="id" value="1"/>
    <property name="name" value="宋智孝"/>
    <property name="nickName" value="懵懵"/>
</bean>

1.id:为bean取一个全局唯一的名字。该属性可选,如果没有声明该属性,那么Spring会采用"全限定名#{number}"的方式自动生成一个编号,number从0开始计数。
比如声明了两个Person对象,如下:

<bean class="com.xl.spring.xlIoc.beans.Person">
    <property name="id" value="1"/>
    <property name="name" value="宋智孝"/>
    <property name="nickName" value="懵懵"/>
</bean>
<bean class="com.xl.spring.xlIoc.beans.Person">
    <property name="id" value="2"/>
    <property name="name" value="周杰伦"/>
    <property name="nickName" value="Jack"/>
</bean>

这时想要获取对象:

ApplicationContext ac = new ClassPathXmlApplicationContext("springioc.xml");
Person person = (Person) ac.getBean(Person.class.getName() + "#1");
System.out.println(person.toString());

2.class:注入的对象的类型,对应的是类的全限定名。
3.property:定义类的属性,其中name表示属性名,value表示属性值。

3,装配集合

以上实现注入,都是对于一些基本数据类型和String类型。如果数据类型是集合的话,那么用如下做法:
1.首先定义一个新的类 --> Coder:

package com.xl.spring.xlIoc.beans;
 
import lombok.Data;
 
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
 
@Data
public class Coder {
    private String name;
    private List<String> languages;
    private Set<String> friends;
    private Map<String, Integer> houses;
    private Properties properties;
}

2.在Spring的xml文件中,注入Coder:

<bean id="coder" class="com.xl.spring.xlIoc.beans.Coder">
    <property name="name" value="宋智孝"/>
    <!--配置list集合-->
    <property name="languages">
        <list>
            <value>java</value>
            <value>JavaScript</value>
            <value>SQL</value>
        </list>
    </property>
    <!--配置set集合-->
    <property name="friends">
        <set>
            <value>金钟国</value>
            <value>河东勋</value>
            <value>刘在石</value>
            <value>池石镇</value>
            <value>全邵旻</value>
        </set>
    </property>
    <!--配置map集合-->
    <property name="houses">
        <map>
            <entry key="麻浦区" value="240000000" />
        </map>
    </property>
    <!--配置properties集合-->
    <property name="properties">
        <props>
            <prop key="身高">168</prop>
            <prop key="体重">52.3</prop>
            <prop key="年龄">30</prop>
        </props>
    </property>
</bean>

3.调用:

public static void testCoder() {
    //1.通过配置文件获取到spring的上下文
    ApplicationContext ac = new ClassPathXmlApplicationContext("springioc.xml");
    Coder coder = (Coder) ac.getBean("coder");
    coder.getFriends().forEach(s -> System.out.println("friend ---> " + s));
}

4,复杂Bean装配

如果属性是一个复杂集合对象,比如属性是List或Map,而这个List的泛型是一个对象,或者说Map的key和value都是一个对象。
这个时候怎么办?
解决思路:先把泛型对应的Bean注入好,然后在注入属性的时候引入过去就好。
1.首先定义三个类:其中UserRole中需要使用User对象和Role对象

package com.xl.spring.xlIoc.beans;
 
import lombok.Data;
 
@Data
public class User {
    private Integer id;
    private String name;
}
package com.xl.spring.xlIoc.beans;
 
import lombok.Data;
 
@Data
public class Role {
    private Integer id;
    private String name;
}
 
 
package com.xl.spring.xlIoc.beans;
 
import lombok.Data;
 
import java.util.List;
import java.util.Map;
 
@Data
public class UserRole {
    private Integer id;
    private List<User> users;
    private Map<Role, User> map;
}

2.先注入对应的User对象和Role对象,然后再注入UserRole对象:

<bean id="user1" class="com.xl.spring.xlIoc.beans.User">
    <property name="id" value="1"/>
    <property name="name" value="张生"/>
</bean>
<bean id="user2" class="com.xl.spring.xlIoc.beans.User">
    <property name="id" value="2"/>
    <property name="name" value="莺莺"/>
</bean>
<bean id="role1" class="com.xl.spring.xlIoc.beans.Role">
    <property name="id" value="1"/>
    <property name="name" value="管理员"/>
</bean>
<bean id="role2" class="com.xl.spring.xlIoc.beans.Role">
    <property name="id" value="2"/>
    <property name="name" value="普通用户"/>
</bean>
<bean id="userRole" class="com.xl.spring.xlIoc.beans.UserRole">
    <property name="id" value="1"/>
    <property name="users">
        <list>
            <ref bean="user1"/>
            <ref bean="user2"/>
        </list>
    </property>
    <property name="map">
        <map>
            <entry key-ref="role1" value-ref="user1"/>
            <entry key-ref="role2" value-ref="user2"/>
        </map>
    </property>
</bean>

3.创建对象并使用:

public static void testComplexBean() {
    ApplicationContext ac = new ClassPathXmlApplicationContext("springioc.xml");
    UserRole userRole = (UserRole) ac.getBean("userRole");
    System.out.println(userRole);
}

到此这篇关于Spring Xml装配Bean的文章就介绍到这了,更多相关Spring Xml装配Bean内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Jmeter中的BeanShell脚本

    详解Jmeter中的BeanShell脚本

    BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法,所以它和java是可以无缝衔接的,学了Java的一些基本语法后,就可以来在Jmeter中写写BeanShell脚本了
    2021-12-12
  • 9个java数组常用操作实例

    9个java数组常用操作实例

    在本篇文章里小编给各位整理了关于java数组常用操作的实例以及相关的代码,需要的朋友们跟着学习下。
    2019-07-07
  • RocketMQ生产消息与消费消息超详细讲解

    RocketMQ生产消息与消费消息超详细讲解

    这篇文章主要介绍了RocketMQ生产消息与消费消息,RocketMQ可用于以三种方式发送消息:可靠的同步、可靠的异步和单向传输。前两种消息类型是可靠的,因为无论它们是否成功发送都有响应
    2022-12-12
  • Springboot中登录后关于cookie和session拦截问题的案例分析

    Springboot中登录后关于cookie和session拦截问题的案例分析

    这篇文章主要介绍了Springboot中登录后关于cookie和session拦截案例,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Maven版本依赖pom文件内容及使用剖析

    Maven版本依赖pom文件内容及使用剖析

    这篇文章主要为大家介绍了Maven版本依赖pom文件内容及使用剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Spring Boot集成 Spring Boot Admin 监控

    Spring Boot集成 Spring Boot Admin 监控

    这篇文章主要介绍了Spring Boot集成 Spring Boot Admin 监控,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java项目中实现使用traceId跟踪请求全流程日志

    Java项目中实现使用traceId跟踪请求全流程日志

    这篇文章主要介绍了Java项目中实现使用traceId跟踪请求全流程日志方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • springboot中报错Invalid character found in the request的解决

    springboot中报错Invalid character found in 

    这篇文章主要介绍了springboot中报错Invalid character found in the request的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Java基于代理模式解决红酒经销问题详解

    Java基于代理模式解决红酒经销问题详解

    这篇文章主要介绍了Java基于代理模式解决红酒经销问题,详细描述了代理模式的概念、原理并结合实例形式分析了java基于代理模式解决红酒经销问题的相关步骤、实现方法与操作注意事项,需要的朋友可以参考下
    2018-04-04
  • Java的HashMap源码解析

    Java的HashMap源码解析

    这篇文章主要介绍了Java的HashMap源码解析,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对是一个Node,后台是用一个Node数组来存放数据,这个Node数组就是HashMap的主干,需要的朋友可以参考下
    2023-11-11

最新评论