我正在使用 spring 4.0.5 和 Java 1.7.0-51。我创建了一个 Integer 类型的 spring bean,并通过它的构造函数在 Applicationcontext.xml 中设置值,如下所示。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
">
<context:component-scan base-package="com.spring.beans"></context:component-scan>
<bean id="user.min" class="java.lang.Integer"> <constructor-arg value="30" /></bean>
<bean id="machine.min" class="java.lang.Integer"> <constructor-arg value="30" /></bean>
</beans>
我将这些 bean 注入(inject)到我已经设置了一些默认值的类中。
@Component
public class Token {
@Autowired(required = false)
@Qualifier("user.min")
private Integer userMin = 480;
@Autowired(required = false)
@Qualifier("machine.min")
private int machineMin = 480;
public Integer getUserMin() {
return userMin;
}
public void setUserMin(Integer userMin) {
this.userMin = userMin;
}
public int getMachineMin() {
return machineMin;
}
public void setMachineMin(int machineMin) {
this.machineMin = machineMin;
}
当我打印这些值时,我得到以下值。
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("Applicationcontext.xml");
Token t = context.getBean(Token.class);
System.out.println("User:"+t.getUserMin());
System.out.println("Machine:"+t.getMachineMin());
}
Output:
User:30
Machine:480
userMin(Integer 类)的值是从 bean 注入(inject)的,但 machineMin(原始类型 int)的值不是注入(inject)的。
原始类型 'int'
未自动装箱为 Integer
。是spring的bug还是我配置的方式不对?我正在 Windows 7 (Eclipse Juno) 上工作。有人请帮忙。
最佳答案
问题在于,带有注释配置的 Spring 按类型进行注释(先按名称,然后按名称)。它查找字段或方法(或构造函数)参数是任何类型的 bean。在您的情况下,它是 int
并且 ApplicationContext
中没有类型为 int
的 bean。由于不需要您的注入(inject)目标,因此 Spring 不会抛出异常。
我不会说这是一个错误,有解决方法,只是 @Autowired
没有。
关于java - 在 spring bean 中自动装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186326/