2 回答
TA贡献1775条经验 获得超8个赞
我的问题是为什么那些变量分配了那些值?
首先,Spring 创建一个 bean 之后,它会调用那个 bean 的@PostConstruct
方法。
其次,Spring会为以下情况创建一个bean:
如果一个类被注解
@Component
或者它的构造型注解如@Repository
,@Service
, 和@Controller
etc ,并且为包含该类的包启用自动扫描功能,它将为它创建一个 bean。如果
@Configuration
/@Component
class 上的方法被注解@Bean
,Spring 将调用该方法来创建一个 bean。
因此,您的示例创建了 2 个类型为Actuator
. A 归因于@Component
onActuator
类,而 B 归因于@Bean
方法 on BeanCreator.actuator()
。这就是为什么您会看到init()
执行两次,因为有两个Actuator
bean。对于 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。
在本文中阅读有关此注释的使用的更多信息。
添加回答
举报