gpt4 book ai didi

java - 为什么@ComponentScan 对于不同的配置文件表现不同?

转载 作者:行者123 更新时间:2023-12-04 12:54:10 24 4
gpt4 key购买 nike

我对 Spring 比较陌生,并且正在学习一些示例。
在其中一个示例中,我注意到 Spring 没有将 URI 映射到方法。
我发现我将 @ComponentScan 注释放在错误的配置类上并解决了我的问题。
所以我的问题是为什么@ComponentScan 适用于这些类之一,而不适用于另一个?


@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/");
}
}


@Configuration
//@ComponentScan(basePackages = {"org.zerock.controller"}) This Doesn't Work
public class RootConfig {
}

// 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 类在应用程序上下文层次结构中的设置不同。
我怀疑这与此有关,但我看不出这将如何导致这种情况。

最佳答案

Javadoc AbstractAnnotationConfigDispatcherServletInitializer建议实现:
getRootConfigClasses() -- 用于“根”应用程序上下文(非 Web 基础架构)配置。
getServletConfigClasses() -- 用于 DispatcherServlet 应用程序上下文(Spring MVC 基础设施)配置。
如果不需要应用程序上下文层次结构,应用程序可以通过 getRootConfigClasses() 返回所有配置
因此,如果 ServletConfig 级别上没有重复,则 RootConfig 上的 @ComponentScan 应该可以工作。
你能发布你得到的错误和所有类吗?
我建议您将 RootConfig 放在包的根目录中,并在不指定基础包的情况下使用 @ComponentScan。

关于java - 为什么@ComponentScan 对于不同的配置文件表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68994079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com