您的位置:首页 > 运维架构 > Linux

Linux 学习笔记_3_Linux常用命令_3_文件搜索命令

2013-12-26 16:35 936 查看
我也是刚学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"/>

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: