gpt4 book ai didi

java - 使用@Import 批注是否会创建导入文件中定义的所有bean?

转载 作者:行者123 更新时间:2023-12-05 03:35:05 26 4
gpt4 key购买 nike

A.java:

@Configuration
@Import(B.class)
class A {
@Bean
public X x(Y y) {
return new X(y);
}
}

B.java:

@Configuration
class B {
@Bean
public Y y() {
return new Y();
}
// And some other beans are defined
}

x 实例化时,B.java 中定义的所有bean 都会被实例化吗?由于文件 B.java 是由 A.java 导入的。

最佳答案

首先,我运行了您发布的示例。然后我用以下变化测试了一个样本,

@Configuration
@Import(B.class)
class A {
@Bean
public X x(Y y) {
return new X(y);
}
}

然后最后一个变化如下,

@Slf4j
@Configuration
class B {
@Bean
public Y y() {
log.info("Creating bean Y in B {}", System.currentTimeMillis());
return new Y();
}

@Bean
public Z z(){
log.info("Creating bean Z in B {}", System.currentTimeMillis());
return new Z();
}
// And some other beans are defined
}

这是我根据观察得出的结论,

  • 当您使用注解 @Bean 时,bean 始终是从使用 @Component@Configuration 注解的类中声明的@Service 并且您的组件类是您在 @ComponentScan 中声明的包的一部分,那么 Spring 将始终注册您的 bean。我可以肯定地说,@Import 与 bean 创建几乎没有关系。
  • 在多次运行 second first(一个带有默认构造函数)后,我发现 bean X 在 bean Y 之前创建。
  • 在运行第二个变体时,我在类 B 中声明了多个 bean,创建 bean 的顺序是 Y、X,然后是 Z。

@Import 仅用于对我在 Baeldung 上找到的 bean 定义源进行分组, @Import

关于java - 使用@Import 批注是否会创建导入文件中定义的所有bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69978977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com