springmvc的get请求跳转不到controller的问题

我也是刚学spring不久,在刚照着别的项目配置完一个springmvc框架的时候,,发现在url写请求,跳转不到controller。经过百度和google后,发现我有个地方忽略了。。
就是<context:component-scan.../>的use-default-filters属性,我设置为false。因为如果不设置这个值,默认为true,就会扫描base-package属性指定的包下的所有的类。

--这个在springmvc+spring+hibernate等集成时最容易出问题的地,最典型的错误就是:事务不起作用。

这我也是在百度才知道的。

-- <context:component-scan>会交给org.springframework.context.config.ContextNamespaceHandler处理;

registerBeanDefinitionParser("component-scan", new ComponentScanBeanDefinitionParser());

-- ComponentScanBeanDefinitionParser会读取配置文件信息并组装成org.springframework.context.annotation.ClassPathBeanDefinitionScanner进行处理;
-- 如果没有配置<context:component-scan>的use-default-filters属性,则默认为true,在创建ClassPathBeanDefinitionScanner时会根据use-default-filters是否为true来调用如下代码:

protected void registerDefaultFilters() { 
this.includeFilters.add(new AnnotationTypeFilter(Component.class)); 
ClassLoader cl = ClassPathScanningCandidateComponentProvider.class.getClassLoader(); 
try { 
    this.includeFilters.add(new AnnotationTypeFilter( 
            ((Class<? extends Annotation>) cl.loadClass("javax.annotation.ManagedBean")), false)); 
    logger.info("JSR-250 ‘javax.annotation.ManagedBean‘ found and supported for component scanning"); 
} 
catch (ClassNotFoundException ex) { 
    // JSR-250 1.1 API (as included in Java EE 6) not available - simply skip. 
} 
try { 
    this.includeFilters.add(new AnnotationTypeFilter( 
            ((Class<? extends Annotation>) cl.loadClass("javax.inject.Named")), false)); 
    logger.info("JSR-330 ‘javax.inject.Named‘ annotation found and supported for component scanning"); 
} 
catch (ClassNotFoundException ex) { 
    // JSR-330 API not available - simply skip. 
}

可以看到默认ClassPathBeanDefinitionScanner会自动注册对@Component、@ManagedBean、@Named注解的Bean进行扫描。

我原本的配置只有Repositroty,和Service,少了对controller的扫描,所以才会跳不到controller。
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

springmvc的get请求跳转不到controller的问题,布布扣,bubuko.com

springmvc的get请求跳转不到controller的问题

上一篇:主线程中调用WaitForSingleObject函数造成的死锁问题


下一篇:要学好JAVA要注意些什么?