2 回答
TA贡献1775条经验 获得超8个赞
我的问题是为什么那些变量分配了那些值?
首先,Spring 创建一个 bean 之后,它会调用那个 bean 的@PostConstruct方法。
其次,Spring会为以下情况创建一个bean:
如果一个类被注解
@Component或者它的构造型注解如@Repository,@Service, 和@Controlleretc ,并且为包含该类的包启用自动扫描功能,它将为它创建一个 bean。如果
@Configuration/@Componentclass 上的方法被注解@Bean,Spring 将调用该方法来创建一个 bean。
因此,您的示例创建了 2 个类型为Actuator. A 归因于@ComponentonActuator类,而 B 归因于@Bean方法 on BeanCreator.actuator()。这就是为什么您会看到init()执行两次,因为有两个Actuatorbean。对于 A ,它init()是用 NULL 执行的。对于 B,它init()是用“abc”和“xyz”执行的,只是因为您在@Bean创建它的方法中设置了它。
TA贡献1963条经验 获得超6个赞
根据 Spring 的官方文档,注释为的方法@Bean将自动执行,我假设这发生在您希望它发生之前的某个时间点。
要声明一个 bean,只需使用 @Bean 注释来注释一个方法。当 JavaConfig 遇到这样的方法时,它将执行该方法并将返回值注册为 BeanFactory 中的 bean。
您可以使用@DependsOn注释来控制 bean 创建顺序:
默认情况下,Spring 管理 bean 的生命周期并安排它们的初始化顺序。
但是,我们仍然可以根据需要自定义它。我们可以选择 SmartLifeCycle 接口或 @DependsOn 注释来管理初始化顺序。
我们应该使用此注释来指定 bean 依赖项。Spring 保证在尝试初始化当前 bean 之前将初始化定义的 bean。
在本文中阅读有关此注释的使用的更多信息。
添加回答
举报
