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

标签 java spring spring-boot spring-annotations

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/

相关文章:

java - 如何从java maven项目中的两个不同版本的jar加载一个类的两个版本?

java - 如何制作 JCheckBox 的二维数组?

java - 在同一个项目中使用 spring mvc 应用程序和 jersey 是否存在潜在问题?

进入数据库前的Java缓存数据

java - Hibernate Spring Transactional 没有正在进行的事务

java - spring data jpa : after update @many side table, 无法通过同一方法中的 findAll @one side table 获得正确的更改

spring-boot - Spring Boot Tomcat访问日志

java - 想要从我的文件中读取唯一编号|错误 - java.lang.NullPointerException

spring-boot - 定义内存中的 JobRepository

java - Tomcat VS jetty