在Spring中将一个bean注入到另一个bean中

7
我正在尝试将一个bean注入到使用它的另一个bean中。我该怎么做?
public class MySpringConfig{
@Bean
public MyObject getMyObject() {
  //.....

  return MyObjectInstance;
}



@Bean
public SomeObject getSomeObject(MyObject myObject) {

  //.....

  return SomeObjectInstance;
 }    
}

2
你实际尝试过这段代码吗?这不起作用吗? - lealceldeiro
1
你可以尝试在getSomeObject方法参数上添加{@Autowire}注解,这样可以将你的bean注入其中。 - Ravi Teja
正如@lealceldeiro所指出的那样,如果满足一些约束条件,您的代码应该可以工作。如果它没有工作,您应该将参数对象命名为与您需要的@Bean方法相同,在您的情况下,它应该是getSomeObject(MyObject getMyObject) - Jordan Silva
3个回答

4

我认为你可以用这种方法来实现,这在我的项目中可行。

@Configuration
public class AppConfig {

 @Bean
 public Bean1 foo(@Qualifier("bean2") Bean2 bean2) {
  return new Bean1(bean2);
 }

}

如果我们想手动调用它,我们要传递什么?例如:AppConfig appConfig = new AppConfig(); Bean1 myBean = appConfig.foo(); //这里应该传递什么参数?我希望每次执行appConfig.foo()时都能得到相同的对象。 - James

3

i think that might work!

 @Configuration
 public class AppConfig {

  @Bean
  public Bean2 bean2() {
      return new Bean2();
  }

  @Bean
  @DependsOn({"bean2"})
  public Bean1 foo(@Autowired Bean2 bean2) {
     return new Bean1(bean2); // or your can write new Bean1(bean2());
  }

}


1
@DependsOn@Autowired不是必需的。 - Jordan Silva

1

@Bean@Component 中,参数的工作方式并不完全相同。
对于使用 @Component 注释的类,为自动装配构造函数指定它们是必需的,但在 @Bean 声明中,如果当前类中可以访问到它,你不需要提供参数来指定要使用的 MyObject 依赖项(虽然这样也可以工作)。
因此,您希望通过在 @Bean 定义中调用 getMyObject() 直接注入 bean。
例如,要传递构造函数参数:

@Bean
public SomeObject getSomeObject() {

  //....
  // you injected MyObject in the current bean to create
  SomeObject object = new SomeObject(getMyObject());
  //...
  return SomeObjectInstance;     
}

不要忘记使用@Configuration来为该类添加注释,以便Spring能够识别它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接