java - 在 spring bean 中自动装箱

标签 java spring dependency-injection autoboxing

我正在使用 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

enter image description here

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/

相关文章:

java - 如何为 ItemizedOverlay 中的项目添加 OnClickListener

c# - 有没有一种方法可以防止注入(inject)在 ASP.NET 中多次注册的接口(interface)的单一实现?

angular - 解析 Angular 通用服务中的通用参数

java - 使用 ApplicationContext 但不使用 XmlBeanFactory

java - 未发现异常但邮件未在 Spring MVC 中发送

spring - 使用 @Transactional 时此行上有多个标记

c# - 使用简单注入(inject)器注入(inject)控制台应用程序

java - Scala 与没有 2.12 M2 标志的 Java SAM 互操作

java:将服务器合并到客户端

java - Java线程中的System.exit