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,List
、Set
和Map
接口可以被<list/>
、<set/>
和<map/>
元素注入。不支持Queue
接口。然而,由于ArrayDeque
有一个Collection
的构造函数,我们可以将值从List
注入到ArrayDeque
到<constructor-arg/>
元素。
以下示例演示如何为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向队列注入值的主要内容,如果未能解决你的问题,请参考以下文章