首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bean生命周期中何时调用setter注入

在bean生命周期中何时调用setter注入
EN

Stack Overflow用户
提问于 2021-06-03 10:37:34
回答 1查看 83关注 0票数 0

我曾经读到过,对于setter注入,依赖项直到需要时才会被注入。但是,当我对此运行一个小测试时,我发现在使用setter注入时,依赖项是在应用程序启动时注入的。实际上,在Spring bean生命周期中何时调用setter注入?“依赖关系只有在需要时才会被注入”是什么意思?

代码语言:javascript
复制
@Service
public class MainService {

  private DependencyService dependencyService;

  @Autowired
  public void setDependencyService(DependencyService dependencyService) {
    this.dependencyService = dependencyService;
  }

  @PostConstruct
  public void afterConstruct() {
    System.out.println("Created MainService bean");
    if (service != null) {
      System.out.println("DependencyService is injected");
    }
  }
}

@Service
public class DependencyService {

  @PostConstruct
  public void afterConstruct() {
    System.out.println("created DependencyService bean");
  }
}

On application startup, the console result:
Created DependencyService bean
Created MainService bean
DependencyService is injected
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-03 17:43:36

无论您使用字段注入、setter注入还是构造函数注入,依赖项总是在bean实例化之后或期间立即注入。

所以这取决于bean何时被初始化。缺省情况下,所有bean都将在启动时立即初始化,这意味着它们的依赖项也会在启动时注入

这通常是一种理想的行为,因为它允许您在启动时发现由于bean配置而导致的错误,而不是在几个小时甚至几天之后。

通过将bean注释为@Lazy,您可以将bean更改为延迟初始化,直到需要它们为止。因此,如果您希望MainService在被访问之前一直处于延迟初始化状态(即其setter注入不会在启动时发生),您必须:

代码语言:javascript
复制
@Service
@Lazy
public class MainService {

} 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67814702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档