Java 内豆创造的春天秩序
我有很多相互依赖的豆子。我试图弄明白我在做什么是写作的方式?我需要确保创建顺序将被遵循等,如果有更好的或替代的方式来做这件事。谢谢Java 内豆创造的春天秩序,java,spring,spring-boot,Java,Spring,Spring Boot,我有很多相互依赖的豆子。我试图弄明白我在做什么是写作的方式?我需要确保创建顺序将被遵循等,如果有更好的或替代的方式来做这件事。谢谢 @Bean public BeanA getBeanA(){ return BeanA(); } @Bean public BeanB getBeanB(){ return BeanB(getBeanA()); } @Bean public BeanC getBeanC(){ return BeanC(getBeanA(), getBeanB());
@Bean
public BeanA getBeanA(){
return BeanA();
}
@Bean
public BeanB getBeanB(){
return BeanB(getBeanA());
}
@Bean
public BeanC getBeanC(){
return BeanC(getBeanA(), getBeanB());
}
正确的方法如下。让DI为您控制接线
@Bean
public BeanA getBeanA(){
return BeanA();
}
@Bean
public BeanB getBeanB(BeanA beanA){
return BeanB(beanA);
}
@Bean
public BeanC getBeanC(BeanA beanA, BeanB beanb){
return BeanC(beanA, beanB);
}
DI的全部目的是为它提供对象和声明依赖项,并让它正确地确定bean创建和连接的顺序 重写对bean的创建顺序没有任何影响。。。想解释一下为什么你认为这比OP更“正确”吗?@meriton依赖注入框架Spring将在运行时评估创建顺序。首先创建A,然后创建B,然后创建C。为什么这是正确的,因为在这里您创建了BeanA、BeanB、BeanC的单个实例,然后让DI为您连接,这就是DI的全部思想。在Op的方法中,他们是手工创建对象(通过显式调用方法)实际上,Spring的
ConfigurationClassPostProcessor
覆盖@Bean
方法来执行ApplicationContext
中的查找。因此,就ApplicationContext而言,您是否拥有@Bean
方法的Spring autowire参数,或者是否通过调用其他@Bean
方法来获取依赖项,都无关紧要。Spring团队记录了这两种方法,据我所知,没有表示其中一种方法比另一种“更正确”。感谢所有的回答/评论。但是有没有其他方法可以代替将它们作为参数传递?例如:beanb(BeanA-BeanA)。让所有的豆子都注册到我的答案里;c代码是您所需要的。2.每当你想在某个地方使用这个bean时,你不必调用springConfig.getBean(…)
而是将这个bean注入你需要的地方,请在这里浏览DI基础知识。你考虑过使用Spring@DependsOn
注释吗?