初学者对春天自动装配的困惑

时间:2015-02-04 01:58:35

标签: spring javabeans

所有

我刚刚开始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。 是否有任何好的技巧可以清楚地记住并以不同的方式分辨差异?

由于

2 个答案:

答案 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注释一起使用。