在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean
注意:如果配置了<context:component-scan>那么<context:annotation-config/>标签就可以不用再xml中配置了,因为前者包含了后者。另外<context:annotation-config/>还提供了两个子标签
1. <context:include-filter>
2. <context:exclude-filter>
在说明这两个子标签前,先说一下<context:component-scan>有一个use-default-filters属性,改属性默认为true,这就意味着会扫描指定包下的全部的标有@Component的类,并注册成bean.也就是@Component的子注解@Service,@Reposity等。所以如果仅仅是在配置文件中这么写
<context:component-scan base-package="tv.huan.weisp.web"/>
Use-default-filter此时为true那么会对base-package包或者子包下的所有的进行java类进行扫描,并把匹配的java类注册成bean。
可以发现这种扫描的粒度有点太大,如果你只想扫描指定包下面的Controller,该怎么办?此时子标签<context:incluce-filter>就起到了勇武之地。如下所示
<context:component-scan base-package="tv.huan.weisp.web .controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
这样就会只扫描base-package指定下的有@Controller下的java类,并注册成bean
但是因为use-dafault-filter在上面并没有指定,默认就为true,所以当把上面的配置改成如下所示的时候,就会产生与你期望相悖的结果(注意base-package包值得变化)
<context:component-scan base-package="tv.huan.weisp.web ">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
此时,spring不仅扫描了@Controller,还扫描了指定包所在的子包service包下注解@Service的java类
此时指定的include-filter没有起到作用,只要把use-default-filter设置成false就可以了。这样就可以避免在base-packeage配置多个包名这种不是很优雅的方法来解决这个问题了。
另外在我参与的项目中可以发现在base-package指定的包中有的子包是不含有注解了,所以不用扫描,此时可以指定<context:exclude-filter>来进行过滤,说明此包不需要被扫描。综合以上说明
Use-dafault-filters=”false”的情况下:<context:exclude-filter>指定的不扫描,<context:include-filter>指定的扫描
转自:http://blog.csdn.net/chunqiuwei/article/details/16115135
分享到:
相关推荐
在Spring框架中,`<context:component-scan/>`元素是核心组件扫描的基石,它允许我们自动检测和注册beans,极大地简化了配置工作。这篇博客将深入探讨这个功能强大的特性,以及如何在实际开发中有效利用它。 一、...
然而,在配置过程中,如果遇到“元素 'context:component-scan' 的前缀 'context' 未绑定”的错误,这意味着Spring无法识别和解析这个元素,因为缺少了对应的命名空间定义。 这个问题的根源在于XML配置文件中没有...
使用<context:component-scan/>标签需要在 Spring 配置文件中添加以下代码: ```xml <context:component-scan base-package="com.example"/> ``` 其中,base-package 指定了要扫描的包名。 Spring 框架会自动检测该...
<context:component-scan base-package="me.gacl.dao,me.gacl.service"/> </beans> ``` 4. **创建配置属性文件**(`config.properties`): - 这个文件通常用于存储数据库连接信息、其他配置参数等。 - 示例...
</context:component-scan> ``` 使用注解过滤某些类: ```xml <context:component-scan base-package="com.example"> <context:include-filter type="annotation" expression="org.springframework.stereotype....
这个文件包含了所有在Spring MVC 4.2版本中可以使用的XML配置元素和属性,例如`<mvc:annotation-driven>`、`<bean>`、`<context:component-scan>`等。这些配置元素允许开发者声明式地配置控制器、视图解析器、转换...
同时,`<context:component-scan>`元素则能自动扫描并注册带有特定注解的bean,进一步降低了配置复杂性。 在Spring Framework 4.3.4.RELEASE中,XML Schema的使用极大地提高了配置的可读性和可维护性,使得开发者...
</context:component-scan> ``` 2. **数据库连接配置**:我们需要从`jdbc.properties`文件中读取数据库连接信息。使用`context:property-placeholder`标签将属性文件加载到Spring上下文中。然后,配置数据源`...
在这个主题中,我们将深入探讨`<context:annotation-config>`与`<context:component-scan>`的区别,事务管理器的配置,以及Spring开发环境的选择和数据源的配置。 1. `<context:annotation-config>`和`<context:...
要启用Spring的自动扫描功能,需要在配置文件中添加`<context:component-scan>`标签,并设置其`base-package`属性以指定需要扫描的包路径。例如,在给定的配置示例中,通过以下XML片段实现了这一功能: ```xml ...
在这个版本中,Spring对测试模块也做了加强,`<context:component-scan>`可以在测试环境中自动扫描和注册组件,`<test>`标签则用于定义单元测试的配置。 总结来说,Spring Framework 4.2.4.RELEASE的Schema特性...
1. **`<context:component-scan>`**: 这个元素告诉Spring扫描指定的包,寻找带有特定注解(如@Controller、@Service、@Repository和@Component)的类,以便自动注册这些bean到Spring容器中。这是实现DI的关键步骤。 ...
其次,`context.xsd`扩展了`beans.xsd`,提供了更多上下文相关的配置,如`<context:component-scan>`用于自动扫描并注册带有特定注解的bean,实现了基于注解的组件发现。此外,`<context:property-placeholder>`则...
它包括了如`<context:component-scan>`、`<context:annotation-config>`等元素,使得我们可以方便地启用注解驱动的配置和组件扫描,发现并自动装配带有特定注解的类。此外,它还支持消息源、AOP代理、事件监听等特性...
本文旨在深入探讨Spring框架中基于注解的依赖注入机制,特别是`@Repository`、`@Service`、`@Controller`和`@Component`等核心注解的使用方法,以及如何利用`<context:component-scan>`自动扫描功能,实现类级别的...
`context`命名空间下的 `<context:component-scan>`、`<context:property-placeholder>`等元素,用于扫描组件、加载外部属性文件,增强了Spring的应用范围和灵活性。 "cache"模块则提供了缓存抽象,支持如 EhCache...
2. `<context:component-scan>`: - 这个元素告诉Spring扫描指定包及其子包,寻找带有`@Controller`注解的类,并将它们作为bean进行管理。 3. `<mvc:annotation-driven>`(通常也会包含,但此处未提供): - 这个...
在上面的配置文件中,我们使用了 `<context:annotation-config/>` 和 `<context:component-scan base-package="testspring.main"/>` 两个标签。 `<context:annotation-config/>` 用于启用注释型的 IOC,而 `<context...
`<context:component-scan>`注解扫描指定的包,查找带有注解的组件,包括我们的`@Controller`。`<mvc:annotation-driven>`则启用了Spring MVC的注解支持。 最后,`web.xml`是应用的部署描述符,配置`...