当前位置: 首页 > 知识库问答 >
问题:

如何从@Bean返回一个依赖于其他Bean的Bean。[重复]

漆雕绍晖
2023-03-14

我有一个@Configuration注释类,它有@Bean注释方法。它们中的大多数只返回没有DI依赖项的新实例,例如:

@Bean
public UserService getUserService() {
    return new InMemoryUserService();
}

但是一些bean需要构造函数注入,例如。

@Bean
public BookingService getBookingService() {
    return new InMemoryBookingServiceImpl(???); // i need to inject UserService to constructor
}

我该怎么做?

共有1个答案

吕志诚
2023-03-14

只需将所需的bean作为参数传递给方法。

@Bean
public UserService getUserService() {
    return new InMemoryUserService();
}

@Bean
public BookingService getBookingService(UserService userServ) {
    return new InMemoryBookingServiceImpl(userServ); 
}

在这里,当Spring访问getBookingService时,它将看到它需要一个类型为UserService的bean,并将在上下文中查找。

查看文档

所有依赖注入规则都适用。例如,如果没有找到该类型的bean,则会引发异常,或者如果找到多个该类型的bean,您必须使用@Qualifier指定您想要的bean的名称,或使用@主标记其中一个bean

另一种选择是直接使用生成依赖bean的方法:

@Bean
public UserService getUserService() {
    return new InMemoryUserService();
}

@Bean
public BookingService getBookingService() {
    return new InMemoryBookingServiceImpl(getUserService()); 
}
 类似资料:
  • 我面对的是Bean(...)没有资格被所有BeanPostProcess处理。我已经将问题缩小到@Configuration类中的@Bean方法,我认为这是罪魁祸首: 配置类 据我所知,BeanPostProcessor bean创建得相当快,需要过早地实例化MeterRegistry bean,这使得它不合格(因为BeanPostProcessor正在操作尚未注入的bean)。 我在博客上看到一

  • 我已经玩弄了@scope注释(没有用),但我的理解是我不应该这么做。 提前感谢您提供的任何信息!:)

  • 我在如下配置类中创建了一个bean: 在FoodConfig.java 在食品服务课程中,我需要访问食品配置。所以我自动连接了食品配置。 试图从我的FoodServiceTest类访问AbstractFoodService类中的someParam时,我得到一个Nullpointer异常。 然而,若我在AbstractFoodServiceClass的构造函数中注入FoodConfig,它就会工作。

  • 我有一个场景,在呈现JSF页面之前,我必须调用另一个bean和注册的bean属性,因为JSF页面引用bean属性来呈现响应。 处理请求-调用后端方法以获取详细信息-如果(type==XYZ),则调用beantwo.gettypexyz()并按照为beantwo.gettypexyz()定义的导航规则重定向-否则(type==RST),则调用beanthree.gettyperst()并按照为bea

  • 问题内容: 我有两个具有相同属性名称的java类。如何将所有属性复制到另一个装有数据的bean中。我不想使用传统形式来复制属性,因为我有很多属性。 提前致谢。 1班 2班 问题答案: 用途:

  • 我有一个基于XML配置的spring应用程序,其中一个bean需要com.typesafe.config.config参数作为构造函数参数。为此,我们有一个@Configuration类,其中一个方法(注释为@bean)返回一个com.typeSafe.config.config对象。 但spring启动时会抱怨“未能实例化[com.typesafe.config.config]:指定的类是接口”