通过 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;
    }
}