所有
我刚刚开始Spring研究,有一个概念让我很困惑:自动装配。
我需要明确的问题是:
What kind of thing can be autowired? Is it only other beans?
如果我定义了一个类Bar:
public class Bar {
@Autowired
public String name;
}
我在想如果我将@Autowired注释放到像String name;
这样的成员变量上,并且在bean配置XML中我写了:
<bean id="bar" class="com.Bar">
<property name="name" value="Bar" />
</bean>
在Spring中做同样事情的很多方法让我非常困惑。在ToT。 是否有任何好的技巧可以清楚地记住并以不同的方式分辨差异?
由于
答案 0 :(得分:1)
是的,你只能@Autowired Beans。 @Autowired是在Spring中使用依赖注入的方式。它是为Beans提供的 - 组件编写一次并多次使用。在String属性上使用DI是没有意义的,我认为你得到了Exception。
答案 1 :(得分:1)
你不能像你那样在String值中自动装配。
通过编写XML bean声明,您所做的是创建Bar
的单例实例,其名称字段设置为'Bar'的值。
如果你想在应用程序的其他地方使用这个Bar类(比如在一个名为Foo的类中),你可以这样做:
public class Foo {
@Autowired
private Bar bar;
}
Spring会将Bar
的实例注入您的Foo
类。
但是,因为默认情况下Bar
是一个单例,所以无论您将Bar
自动装入不同的类的实例数是多少,都会在所有类中使用相同的Bar
实例。因此,如果您尝试在一个类中修改名称,它将针对所有其他类进行更改。
作为一般的经验法则,如果您的类有任何可变数据(将被更改和更新的数据),那么您的类不应该声明自动装配(因为只会有一个实例)它在你的Spring应用程序中)。它适用于DAO和服务类等更好的工作。在回答您的第一个问题时,是的,您只能自动连接类(bean)的实例。
如果需要从某处获取String / Integer / Long / Array / Mutable Data Type值,请配置属性文件,并阅读如何将org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
类与@Value
注释一起使用。