我有一个@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
}
我该怎么做?
答案 0 :(得分:3)
只需将您需要的bean作为参数传递给方法。
@Bean
public UserService getUserService() {
return new InMemoryUserService();
}
@Bean
public BookingService getBookingService(UserService userServ) {
return new InMemoryBookingServiceImpl(userServ);
}
当Spring到达getBookingService
时,它会看到它需要一个类型为UserService
的bean,并在上下文中寻找一个。
请参阅docs
所有依赖注入规则都适用。就像没有找到那种类型的bean一样抛出异常,或者如果找到更多那种类型的bean,你必须使用@Qualifier
来指定你想要的bean的名称,或者标记其中一个@Primary
另一个选择是直接使用生成依赖项bean的方法:
@Bean
public UserService getUserService() {
return new InMemoryUserService();
}
@Bean
public BookingService getBookingService() {
return new InMemoryBookingServiceImpl(getUserService());
}