通过 XML 配置自动连接依赖项
使用 Spring 框架的组件扫描功能时,可以自动连接依赖关系。要使自动装配工作,必须进行以下 XML 配置:
<context:annotation-config/>
<context:component-scan base-package="[base package]"/>
其中,base-package
是 Spring 应该执行组件扫描的完全限定的 Java 包。
构造函数注入
可以通过类构造函数注入依赖项,如下所示:
@Component
class Bar { ... }
@Component
class Foo {
private Bar bar;
@Autowired
public Foo(Bar bar) { this.bar = bar; }
}
这里,@Autowired
是一个特定于 Spring 的注释。Spring 还支持 JSR-299, 以实现对其他基于 Java 的依赖注入框架的应用程序可移植性。这样可以将 @Autowired
替换为 @Inject
,如下所示:
@Component
class Foo {
private Bar bar;
@Inject
public Foo(Bar bar) { this.bar = bar; }
}
属性注入
也可以使用 setter 方法注入依赖关系,如下所示:
@Component
class Foo {
private Bar bar;
@Autowired
public void setBar(Bar bar) { this.bar = bar; }
}
现场注入
自动装配还允许直接在类实例中初始化字段,如下所示:
@Component
class Foo {
@Autowired
private Bar bar;
}
对于 Spring 版本 4.1+,你可以使用 Optional 作为可选依赖项。
@Component
class Foo {
@Autowired
private Optional<Bar> bar;
}
相同的方法可用于构造函数 DI。
@Component
class Foo {
private Optional<Bar> bar;
@Autowired
Foo(Optional<Bar> bar) {
this.bar = bar;
}
}