`
佳佳1212
  • 浏览: 3951 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

<context:component-scan >

阅读更多

在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扫描器—spring组件扫描使用详解

    在Spring框架中,`&lt;context:component-scan/&gt;`元素是核心组件扫描的基石,它允许我们自动检测和注册beans,极大地简化了配置工作。这篇博客将深入探讨这个功能强大的特性,以及如何在实际开发中有效利用它。 一、...

    Spring 报错:元素 "context:component-scan" 的前缀 "context" 未绑定的问题解决

    &lt;context:component-scan base-package="com.makelove88.**.dao,com.makelove88.**.service" /&gt; &lt;import resource="classpath*:*/applicationContext-*.xml" /&gt; &lt;/beans&gt; ``` 在这个修正后的配置中,我们添加了 ...

    spring-context-4.2.xsd.zip

    例如,`&lt;context:component-scan&gt;`元素可以自动扫描并注册带有特定注解的bean,极大地简化了代码配置。 总结而言,`spring-context-4.2.xsd`是Spring 4.2版本Context模块的核心配置规范,它定义了Spring XML配置...

    Test05_Spring_Context_XML.rar

    在XML配置文件中,我们可以通过`&lt;context:component-scan&gt;`标签来扫描指定包下的类,以便自动发现并注册bean: ```xml &lt;context:component-scan base-package="com.example"/&gt; ``` 最后,Spring提供了多种方式来...

    spring组件扫描contextcomponent-scan使用详解.pdf

    Spring 组件扫描&lt;context:component-scan/&gt;使用详解 在 Spring 框架中,组件扫描是指通过注解和 XML 配置来自动检测和加载Bean的过程。下面将详细介绍&lt;context:component-scan/&gt;标签的使用方式和原理。 一、...

    异常解决:错误:namespace element 'annotation-config' … on JDK 1.5 and higher

    2. **XML配置问题**:确保你的Spring配置文件(如`applicationContext.xml`)正确包含了`&lt;context:component-scan&gt;`或`&lt;context:annotation-config&gt;`元素,它们是启用注解配置的关键。 3. **编译器设置**:检查你的...

    SpringMVC入门

    - **扫描包含Controller的包**:通过`&lt;context:component-scan&gt;`元素指定需要扫描的包。 - **不处理静态资源**:通过`&lt;mvc:default-servlet-handler/&gt;`让Servlet容器处理静态资源。 - **启用注解驱动**:使用`&lt;mvc:...

    Spring配置文件spring-context.zip

    7. `&lt;context:component-scan&gt;`:通过注解扫描特定包下的类,自动发现并注册带有特定注解(如@Controller、@Service、@Repository和@Service)的bean。 8. `&lt;context:annotation-config&gt;`:激活对注解的处理,如@...

    spring注解详细介绍

    `&lt;context:annotation-config/&gt;` 和 `&lt;context:component-scan base-package="需要实现注入的类所在包"/&gt;` 是两个重要的 XML 配置元素,它们用于开启注解支持和指定扫描的包范围。 - `&lt;context:annotation-config/&gt;...

    详解 Spring 3.0 基于 Annotation 的依赖注入实现

    - 通过 `&lt;context:component-scan&gt;` 标签,可以在 XML 配置文件中指定基础包,让 Spring 自动扫描这些包及其子包下的类,寻找带有特定注解的类,将它们注册为 Bean。例如: ```xml &lt;beans ...&gt; &lt;context:...

    spring3零配置注解实现Bean定义(包括JSR-250、JSR-330)

    通过使用`&lt;context:component-scan&gt;`标签配合特定的注解(如`@Component`、`@Service`等),可以完全避免XML配置的使用,从而让开发者能够更加专注于业务逻辑的实现。同时,Spring对JSR-250和JSR-330等标准的支持也...

    spring mvc

    2. `&lt;context:component-scan&gt;`: - 这个元素告诉Spring扫描指定包及其子包,寻找带有`@Controller`注解的类,并将它们作为bean进行管理。 3. `&lt;mvc:annotation-driven&gt;`(通常也会包含,但此处未提供): - 这个...

    15、spring 配置以及使用 1

    在这个主题中,我们将深入探讨`&lt;context:annotation-config&gt;`与`&lt;context:component-scan&gt;`的区别,事务管理器的配置,以及Spring开发环境的选择和数据源的配置。 1. `&lt;context:annotation-config&gt;`和`&lt;context:...

    springMVC详解以及注解说明

    在上述配置中,`&lt;context:component-scan&gt;`用来扫描指定包下的组件,而`&lt;context:annotation-config&gt;`则用于启用注解配置功能。 #### 总结 通过本文的介绍,我们可以看到SpringMVC的强大之处在于其灵活的配置方式...

    基于java的企业级应用开发:Spring MVC的核心类和注解.ppt

    在Spring MVC配置文件中,需要添加`&lt;context:component-scan&gt;`元素来指定需要扫描的包,这样Spring才能找到所有的控制器类。如: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi...

    springMVC.doc

    - `&lt;context:component-scan&gt;` 指定包扫描范围,找到带有 @Controller 注解的类。 例如: ```xml &lt;beans&gt; &lt;context:component-scan base-package="com.example.web.controllers" /&gt; &lt;mvc:annotation-driven /&gt; ...

    Spring实战之Qualifier注解用法示例

    在Spring配置文件中,我们需要使用&lt;context:component-scan&gt;元素来启用自动装配。下面是一个示例配置文件: ```xml &lt;?xml version="1.0" encoding="GBK"?&gt; &lt;beans xmlns=...

    学习ssm整理的xml配置笔记

    在本节中,我们将探讨 SSM 框架中 XML 配置的使用,特别是事务配置和 `&lt;context:component-scan&gt;` 的使用。 一、事务配置 在 SSM 框架中,事务配置是非常重要的,用于确保数据的一致性和安全性。在 XML 配置文件中...

    Spring2.5 注解介绍(3.0通用)

    3. **使用`&lt;context:component-scan&gt;`**: 此指令不仅注册注解处理器,还可以扫描指定的包及其子包,查找带有特定注解的类。`base-package`属性指定了扫描的起点,而`&lt;context:include-filter&gt;`和`&lt;context:exclude-...

Global site tag (gtag.js) - Google Analytics