仅在servlet容器环境中如何注入bean

问题描述 投票:0回答:1

我只需要在 servlet 容器中注入配置 bean。所以,我使用了@ConditionalOnBean,但我不知道它应该依赖哪个bean。我该如何解决这个问题?

 @Bean //@ConditionalOnBean(ServletHttpHandlerAdapter.class) public RequestInfoProvider requestInfoProvider() { return new DefaultRequestInfoProvider(); }

有一个RequestInfoProvider接口,我给它一个依赖于servlet的默认实现。 所以我想要的是当程序使用servlet容器时应该创建DefaultRequestInfoProvider。

代码不起作用,会导致“bean not found 异常”

spring-boot spring-aop
1个回答
0
投票

如果你想确保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();
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.