我是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/"/span>)。
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 {
}
//兩個配置類如何被初始化。
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class}。
}
@Override
protected Class<?> [] getServletConfigClasses() {
return new Class[]{ServletConfig.class}。
}
我讀到根配置類和Servlet類在應用程式背景關系層次結構中的設定是不同的。
我懷疑這與此有關,但我不明白這如何會導致這種情況。
uj5u.com熱心網友回復:
Javadoc為AbstractAnnotationConfigDispatcherServletInitializer推薦實作:
getRootConfigClasses() -- 用于 "根 "應用程式背景關系(非網路基礎設施)配置。 getServletConfigClasses() -- 用于DispatcherServlet應用背景關系(Spring MVC基礎設施)配置。
如果不需要應用背景關系的層次結構,應用程式可以通過getRootConfigClasses()回傳所有配置
。因此,如果 ServletConfig 級別上沒有重復,那么 RootConfig 上的 @ComponentScan 應該可以發揮作用。
你能公布你得到的錯誤和所有的類嗎?
我建議你將 RootConfig 放在你的包的根部,并使用 @ComponentScan 而不指定基礎包。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/313469.html
標籤:
上一篇:在Spring中的UnsatisfiedDependencyException,BeanCreationException...。
