【问题标题】:Usage of @Bean annotation@Bean 注解的使用
【发布时间】:2016-04-06 18:00:40
【问题描述】:

假设我有以下 Spring 上下文配置:

@Configuration
public class Configuration {

    @Bean
    public A a() {
        return new A(b());
    }

    public B b() {
        return new B();
    }
}

如果B 实例需要的唯一位置在a() 内以用于A 实例构造,是否应该用@Bean 注释b()

【问题讨论】:

  • 您当前的设置不会使 B 实例成为 Spring 托管 bean。因此,如果您希望该 bean 上的 @PostConstruct 等内容能够正常工作,那么它只会失败,因为 spring 无法对其进行管理。接下来,您确定这将是您需要的唯一B 实例,或者您可能在多个地方都需要它,然后呢?
  • 那为什么不在A 中实例化B 呢?或者,您可以将B 设为一个bean,然后在A 中声明一个字段,即@Autowired
  • @m-deinum 我注意到here 例如,方法consumerConfigs() 被标记为@Bean...也许它也应该在其他地方使用。

标签: java spring spring-4


【解决方案1】:

如果B 是一个计划Java 类(没有Spring 注释)那么不是,您可以使用当前配置。因为这是 A 类的私有成员。

但是,如果您有需要由 spring 管理的方法(在 B 类中),例如 @PostConstruct 或 @PreDestroy,那么您应该从 B 类中创建一个 Bean:

@Bean
public A a(B b) {
    return new A(b);
}
@Bean
public B b() {
    return new B();
}

这样的情况是:

  • 要在关机/关闭时关闭的资源
  • 执行程序在关机时关闭
  • jdbc 连接

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 1970-01-01
    • 2020-03-21
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多