Spring如何通过XML向队列注入值

Posted

技术标签:

【中文标题】Spring如何通过XML向队列注入值【英文标题】:Spring How to inject value to Queue by XML 【发布时间】:2020-04-20 10:42:53 【问题描述】:

使用Spring框架,我想创建一个Person类型的bean对象,而这个bean对象有一个queue类型的Queue<Integer>属性,如何通过XML给属性注入值?

春季版是4.3

参考文档是https://docs.spring.io/spring/docs/4.3.25.RELEASE/spring-framework-reference/htmlsingle/#beans-factory-class-ctor

但我找不到队列。

我尝试使用<bean>元素,但是bean的queue属性为空。

对象如下

public class People 
    private int id;
    private Queue<Integer> queue;
    // add constructor

    // add get and set

applicationContext.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="..." class="...">
        <property name="queue">
            <bean class="java.util.ArrayDeque">
                //How should I add values to the queue object
            </bean>
        </property>
    </bean>
</beans>

【问题讨论】:

“属性无法填写”是什么意思,有没有报错信息? @samabcde 我找不到如何配置队列。我应该如何向队列对象添加值 【参考方案1】:

通过引用Spring support on collection,ListSetMap接口可以被&lt;list/&gt;&lt;set/&gt;&lt;map/&gt;元素注入。不支持Queue 接口。然而,由于ArrayDeque 有一个Collection 的构造函数,我们可以将值从List 注入到ArrayDeque&lt;constructor-arg/&gt; 元素。

以下示例演示如何为ArrayDeque 添加值。

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="people" class="spring.People">
        <property name="queue">
            <bean class="java.util.ArrayDeque">
                <constructor-arg>
                    <list value-type="java.lang.Integer">
                        <value>1</value>
                        <value>2</value>
                        <value>3</value>
                    </list>
                </constructor-arg>
            </bean>
        </property>
    </bean>
</beans>

主类

package spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class InjectQueueApplication 
    public static void main(String[] args) 
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        People people = context.getBean("people", People.class);
        System.out.println(people.getQueue().toString());
    

【讨论】:

以上是关于Spring如何通过XML向队列注入值的主要内容,如果未能解决你的问题,请参考以下文章

Spring:如何向静态字段注入值?

从头认识Spring-1.7 怎样通过属性注入Bean?-怎样通过属性向对象注入值?

在 Spring 中为静态常量注入值

如何从 context.xml 注入值

如何获取spring 注解的bean

如何将属性值注入使用注释配置的 Spring Bean?