自动装配的局限性

时间:2014-07-28 13:09:43

标签: spring

我读到了Spring的限制:

“属性和构造函数-arg设置中的显式依赖关系总是覆盖自动装配。您不能自动装配所谓的简单属性,例如基元,字符串和类(以及这些简单属性的数组)。这种限制是按设计进行的。”

这是什么意思?

2 个答案:

答案 0 :(得分:1)

这意味着,如果你有这个:

public class MyClass {
    @Autowired
    private MyOtherClass myOtherClass;

    public MyClass(final MyOtherClass myOtherClass) {
        this.myOtherClass = myOtherClass;
    }
}

<bean class="com.something.MyClass">
    <constructor-arg name="myOtherClass" class="com.something.MyOtherClass" />
</bean>

myOtherClass变量的值将是通过构造函数设置的值,而不是自动装配的值。如果myOtherClass通过setter<property> - 元素设置,则同样如此。

另外,你不能这样做:

public class MyClass {
    @Autowired
    private String someString;

    @Autowired
    private int someInt;
}

..这是有道理的,在这些情况下使用@Value代替。

在实践中,这没有那么多后果,通常你的bean将是singletons,以及是通过@Autowired还是通过构造函数/属性注入,只要它是相同的bean没有不同。

答案 1 :(得分:0)

使用 @Autowired 有三个弱点:

  1. 覆盖:您仍然可以使用 <constructor-arg><property> 设置指定依赖项,这些设置将始终覆盖 @Autowired
  2. 原始数据类型:您不能自动装配简单的属性,例如原始数据。
  3. 令人困惑的本质:@Autowired 不如显式连线精确,因此如果可能,最好使用显式连线。