在@Configuration中为spring @Bean提供依赖的正确方法

时间:2017-03-13 21:53:25

标签: java spring spring-boot

在@Configuration类中,可以通过使用带@Bean注释的方法

来创建spring bean
@Component
public class Foo {
}

public class Bar {
  private Foo foo;

  public Bar(Foo foo) {
    this.foo = foo;
  }
}

@Configuration
public class BarConfig {
  @Bean
  public Bar bar(Foo foo) {
    return new Bar(foo);
  }
}

但是将Foo注入BarConfig类并以这种方式使用它也可以让你创建Bar:

@Component
public class Foo {
}

public class Bar {
  private Foo foo;

  public Bar(Foo foo) {
    this.foo = foo;
  }
}

@Configuration
public class BarConfig {
  @Autowired
  private Foo foo;

  @Bean
  public Bar bar() {
    return new Bar(foo); // bar() without args
  }
}

从春天的角度来看,他们之间有什么不同吗?第二个不正确吗?什么会破坏或什么不会因为它而起作用?

我设法发现第二个没有明显依赖于来自Bar的foo,但它会影响到什么吗?刷新/重新加载spring上下文会在重新调整bar时获取foo的变化,不会吗?

1 个答案:

答案 0 :(得分:0)

这两种自动装配的唯一区别是必须写入的代码量。

我建议您使用第一个选项,因为它更短。

如果您必须在@Qualifier对中指定@Autowired注释,并且在单独的配置中声明要注入的注释,则第二个选项是合适的。