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/