Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内豆创造的春天秩序_Java_Spring_Spring Boot - Fatal编程技术网

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
注释吗?