我对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类的设置是不同的。
我怀疑这与此有关,但我看不出这是如何造成的。
发布于 2021-08-31 08:27:40
AbstractAnnotationConfigDispatcherServletInitializer推荐的Javadoc实现:
getRootConfigClasses() --用于“根”应用程序上下文(非web基础设施)配置。getServletConfigClasses() --用于DispatcherServlet应用程序上下文(Spring基础结构)配置。
如果不需要应用程序上下文层次结构,应用程序可以通过getRootConfigClasses()返回所有配置
因此,如果在RootConfig级别上没有复制,那么ServletConfig上的@ComponentScan应该可以工作。
你能把你得到的错误和所有的类都贴出来吗?
我建议您将RootConfig放在包的根目录中,并使用@ComponentScan,而不指定基本包。
https://stackoverflow.com/questions/68994079
复制相似问题