首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么@ComponentScan对不同的配置文件有不同的行为?

为什么@ComponentScan对不同的配置文件有不同的行为?
EN

Stack Overflow用户
提问于 2021-08-31 06:52:29
回答 1查看 54关注 0票数 4

我对Spring还比较陌生,我也是这样做的。

在其中一个示例中,我注意到Spring没有将URI映射到方法。

我发现我把@ComponentScan注释放在了错误的配置类上,并修复了我的问题。

所以我的问题是,为什么@ComponentScan适用于这些类中的一个而不是与另一个类一起工作呢?

代码语言:javascript
复制
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"org.zerock.controller"}) // This Works.
public class ServletConfig implements WebMvcConfigurer {
    @Bean
    public MultipartResolver multipartResolver(){
        return new StandardServletMultipartResolver();
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        registry.viewResolver(resolver);
    }


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }
}
代码语言:javascript
复制
@Configuration
//@ComponentScan(basePackages = {"org.zerock.controller"}) This Doesn't Work
public class RootConfig {
}
代码语言:javascript
复制
// How the two configuration classes are initialized
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{ServletConfig.class};
    }

我已经看到,在应用程序上下文层次结构中,根配置类和servlet类的设置是不同的。

我怀疑这与此有关,但我看不出这是如何造成的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-31 08:27:40

AbstractAnnotationConfigDispatcherServletInitializer推荐的Javadoc实现:

getRootConfigClasses() --用于“根”应用程序上下文(非web基础设施)配置。getServletConfigClasses() --用于DispatcherServlet应用程序上下文(Spring基础结构)配置。

如果不需要应用程序上下文层次结构,应用程序可以通过getRootConfigClasses()返回所有配置

因此,如果在RootConfig级别上没有复制,那么ServletConfig上的@ComponentScan应该可以工作。

你能把你得到的错误和所有的类都贴出来吗?

我建议您将RootConfig放在包的根目录中,并使用@ComponentScan,而不指定基本包。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68994079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档