初学者对 Spring 中的自动装配感到困惑
Beginner confusion about autowiring in Spring
全部:
刚开始Spring学习,有一个概念让我很困惑:Autowiring.
我需要明确的问题是:
What kind of thing can be autowired? Is it only other beans?
如果我定义一个class栏:
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 中做同样事情的方法太多了,这让我很困惑。总计。
有什么好的技巧可以清楚的记住和分辨不同方式的区别吗?
谢谢
是的,您只能@Autowired Beans。 @Autowired是Spring中使用依赖注入的方式。它是为 Beans 提供的——一次编写多次使用的组件。在 String 属性 上使用 DI 是没有意义的,我认为你得到了 Exception.
您不能像您所做的那样自动装配字符串值。
通过编写您的 XML bean 声明,您所做的是创建一个 Bar
的单例实例,并将名称字段设置为 'Bar' 的值。
如果你想在你的应用程序的其他地方使用这个 Bar class(比如在一个名为 Foo 的 class 中)你可以这样做:
public class Foo {
@Autowired
private Bar bar;
}
Spring 然后会将您的 Bar
实例注入您的 Foo
class.
但是因为 Bar
默认情况下是一个单例,所以无论您将多少个 Bar
实例自动连接到不同的 classes,您都将拥有相同的 Bar
实例=] 在所有这些中。因此,如果您尝试修改一个 class 中的名称,所有其他 class 中的名称都会更改。
作为一般经验法则,如果您的 class 有任何可变数据(将被更改和更新的数据),那么您的 class 不是您应该为自动装配声明的东西(因为在您的 Spring 应用程序中只会有一个实例)。它更适合 DAO 和服务 classes 之类的东西。在回答您的第一个问题时,是的,您只能自动装配 classes(bean)的实例。
如果您需要从某处获取 String/Integer/Long/Array/Mutable 数据类型值,请配置一个属性文件,并阅读如何使用 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
class with the @Value
注释。
全部:
刚开始Spring学习,有一个概念让我很困惑:Autowiring.
我需要明确的问题是:
What kind of thing can be autowired? Is it only other beans?
如果我定义一个class栏:
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 中做同样事情的方法太多了,这让我很困惑。总计。 有什么好的技巧可以清楚的记住和分辨不同方式的区别吗?
谢谢
是的,您只能@Autowired Beans。 @Autowired是Spring中使用依赖注入的方式。它是为 Beans 提供的——一次编写多次使用的组件。在 String 属性 上使用 DI 是没有意义的,我认为你得到了 Exception.
您不能像您所做的那样自动装配字符串值。
通过编写您的 XML bean 声明,您所做的是创建一个 Bar
的单例实例,并将名称字段设置为 'Bar' 的值。
如果你想在你的应用程序的其他地方使用这个 Bar class(比如在一个名为 Foo 的 class 中)你可以这样做:
public class Foo {
@Autowired
private Bar bar;
}
Spring 然后会将您的 Bar
实例注入您的 Foo
class.
但是因为 Bar
默认情况下是一个单例,所以无论您将多少个 Bar
实例自动连接到不同的 classes,您都将拥有相同的 Bar
实例=] 在所有这些中。因此,如果您尝试修改一个 class 中的名称,所有其他 class 中的名称都会更改。
作为一般经验法则,如果您的 class 有任何可变数据(将被更改和更新的数据),那么您的 class 不是您应该为自动装配声明的东西(因为在您的 Spring 应用程序中只会有一个实例)。它更适合 DAO 和服务 classes 之类的东西。在回答您的第一个问题时,是的,您只能自动装配 classes(bean)的实例。
如果您需要从某处获取 String/Integer/Long/Array/Mutable 数据类型值,请配置一个属性文件,并阅读如何使用 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
class with the @Value
注释。