我只需要在 servlet 容器中注入配置 bean。所以,我使用了@ConditionalOnBean,但我不知道它应该依赖哪个bean。我该如何解决这个问题?
@Bean //@ConditionalOnBean(ServletHttpHandlerAdapter.class) public RequestInfoProvider requestInfoProvider() { return new DefaultRequestInfoProvider(); }
有一个RequestInfoProvider接口,我给它一个依赖于servlet的默认实现。 所以我想要的是当程序使用servlet容器时应该创建DefaultRequestInfoProvider。
代码不起作用,会导致“bean not found 异常”
如果你想确保DefaultRequestInfoProvider bean仅在servlet容器中运行时创建,你可以使用Spring的@ConditionalOnClass注解而不是@ConditionalOnBean。以下是修改代码的方法:
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
@Configuration
public class MyConfiguration {
@Bean
@ConditionalOnClass(DispatcherServlet.class)
public RequestInfoProvider requestInfoProvider() {
return new DefaultRequestInfoProvider();
}
}