对于SpringBoot中的Bean创建,我们使用带有@Component注解的类和带有@Bean注解的一些Bean创建方法。现在,我一直在这样使用@Bean:
@Bean
public func getSome() {
return someFunc(param1, param2, param3);
}
现在,我在一些代码中看到的是:
@Bean
public func getSome(Type1 param1, Type2 param2, Type 3 param3) {
return someFunc(param1, param2, param3);
}
因此,基本上,Beans是在SpringBoot上下文加载时创建的。我在这里困惑的是***SpringBoot将如何获取bean中的参数(第二个示例)***。
有人能帮我理解吗?
PS:如果问题不清楚,请告诉我。:)
2条答案
按热度按时间n3h0vuf21#
Spring将在上下文中对Type1、Type2和Type3类型bean进行标准查找。如果没有找到这些,Spring将尝试使用默认构造函数创建新示例。如果没有默认构造函数,启动将失败。
也许还有更多的机制,但基本的是这个。
s4n0splo2#
@Bean类似于Spring原型(@Component、@Service、@Controller、@RestController、@Repository和@Configuration)。
当你在上面使用@Bean编写一个方法时,它类似于在类的顶部使用一个构造器(使用@Autowired)的原型,因此它的依赖可以通过Spring的构造器注入;因此,这些参数必须是Springbean,以便可以将它们注入到@Bean注解的方法中。
spring理解注入顺序的方式是通过依赖关系图,spring创建并开始从没有依赖关系或依赖关系已经创建并准备好注入的类创建bean。