Springbean中的java自动装箱
我正在使用Spring4.0.5&;Java1.7.0-51。我创建了一个Integer&;类型的springbean;在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注入到我的类中,在那里我已经设置了一些默认值
@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(类整数)的值是从bean注入的,但machineemin(基元类型int)的值不是注入的
基元类型'int'
不是自动装箱到Integer
。这是Spring中的一个bug还是我配置的方式是错误的?我正在Windows7(EclipseJuno)上使用它。有人请帮忙
# 1 楼答案
问题在于,Spring使用注释配置,按类型(先按类型,然后按名称)进行注释。它查找字段或方法(或构造函数)参数是什么类型的bean。在您的例子中,就是
int
,在ApplicationContext
中没有类型为int
的bean。因为您的注入目标不是必需的,所以Spring不会抛出异常我不会说这是一个bug,有一些变通方法,只是没有
@Autowired