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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • javaweb实现简易邮件发送

    javaweb实现简易邮件发送

    这篇文章主要为大家详细介绍了javaweb实现简易邮件发送,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Spring Cloud Eureka(全面解析) 大白话

    Spring Cloud Eureka(全面解析) 大白话

    这篇文章主要介绍了Spring Cloud Eureka(全面解析) 大白话,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • java如何根据HttpServletRequest获取IP地址

    java如何根据HttpServletRequest获取IP地址

    文章介绍了几种代理服务器转发服务请求头的方法,这些请求头可能包含真实IP地址,但并不是所有的代理都会包括这些请求头,而且这些IP地址可能被伪造
    2025-03-03
  • WebUploader客户端批量上传图片 后台使用springMVC

    WebUploader客户端批量上传图片 后台使用springMVC

    这篇文章主要为大家详细介绍了WebUploader客户端批量上传图片,后台使用springMVC接收实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Java+element实现excel的导入和导出

    Java+element实现excel的导入和导出

    本文主要介绍了Java+element实现excel的导入和导出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Java环境配置与编译运行详解

    Java环境配置与编译运行详解

    这篇文章主要为大家详细介绍了Java环境配置与编译运行的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Spring如何使用@Indexed加快启动速度

    Spring如何使用@Indexed加快启动速度

    这篇文章主要介绍了Spring如何使用@Indexed加快启动速度,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • BufferedReader中read()方法和readLine()方法的使用

    BufferedReader中read()方法和readLine()方法的使用

    这篇文章主要介绍了BufferedReader中read()方法和readLine()方法的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 如何用struts调用支付宝接口

    如何用struts调用支付宝接口

    以下为大家介绍如何用struts调用支付宝接口的例子。
    2013-04-04
  • Java利用Request请求如何获取IP地址对应的省份、城市详解

    Java利用Request请求如何获取IP地址对应的省份、城市详解

    之前已经给大家介绍了关于Java用Request请求获取IP地址的相关内容,那么下面这篇文章将给大家进入深入的介绍,关于Java利用Request请求如何获取IP地址对应省份、城市的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10

最新评论