有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

enter image description here

userMin(类整数)的值是从bean注入的,但machineemin(基元类型int)的值不是注入的

基元类型'int'不是自动装箱到Integer。这是Spring中的一个bug还是我配置的方式是错误的?我正在Windows7(EclipseJuno)上使用它。有人请帮忙


共 (1) 个答案

  1. # 1 楼答案

    问题在于,Spring使用注释配置,按类型(先按类型,然后按名称)进行注释。它查找字段或方法(或构造函数)参数是什么类型的bean。在您的例子中,就是int,在ApplicationContext中没有类型为int的bean。因为您的注入目标不是必需的,所以Spring不会抛出异常

    我不会说这是一个bug,有一些变通方法,只是没有@Autowired