我读到了Spring的限制:
“属性和构造函数-arg设置中的显式依赖关系总是覆盖自动装配。您不能自动装配所谓的简单属性,例如基元,字符串和类(以及这些简单属性的数组)。这种限制是按设计进行的。”
这是什么意思?
答案 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
有三个弱点:
<constructor-arg>
和 <property>
设置指定依赖项,这些设置将始终覆盖 @Autowired
。@Autowired
不如显式连线精确,因此如果可能,最好使用显式连线。