我最近学习了Spring自动装配的概念。当我试图理解Spring自动装配在哪些特定场景下是有用的时,我从我们stakoverflow论坛上提出的一个问题中得出了以下两个原因。
1.我想从属性文件中读取值并将它们注入到bean中。在我的应用程序启动时,我唯一能弄清楚如何做到这一点的方法是将bean连接到XML(并注入属性)。我最终使用了“byName”属性(因为bean也被标记为@Component
),然后在将bean注入到另一个类时使用了@Autowed
@Qualifier("nameIChose")
。这是我编写的唯一一个用XML连接的bean。
2.我发现自动装配在工厂bean制作另一个bean的情况下很有用(其实现类名在系统属性中描述,因此我无法在XML中定义所有连接)。不过,我通常更喜欢显式连接;
请任何人给我一些上述情况的代码片段示例,以使我对自动装配的理解更加清晰?
下面是一个向bean注入属性的示例。
使用字段注入:
@Component
public class YourBean {
@Value("${your.property.name}")
private String yourProperty;
}
使用构造函数注入:
@Component
public class YourBean2 {
private String yourProperty;
@Autowired
public YourBeans2(@Value("${your.property.name}") String yourProperty) {
this.yourProperty = yourProperty;
}
}
下面是一个超级简单的自动装配各种bean的例子
@Component
public class Foo {
public void doSomething() {
}
}
@Component
public class Bar {
private Foo foo;
@Autowired
public Bar(Foo foo) {
this.foo = foo;
}
public void doSomethingElse() {
foo.doSomething();
}
}
在前面的例子中,不需要对Foo和Bar进行XML配置,Spring会自动拾取bean,因为它们的@Component
注释(当然假设组件扫描已经启用)