`
dannyhz
  • 浏览: 387933 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

component-scan 的使用

 
阅读更多
http://blog.csdn.net/chunqiuwei/article/details/16115135

引用


在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>指定的扫描

分享到:
评论

相关推荐

    Spring扫描器—spring组件扫描使用详解

    在Spring框架中,`&lt;context:component-scan/&gt;`元素是核心组件扫描的基石,它允许我们自动检测和注册...在实际项目中,结合使用`@Component`家族注解和`&lt;context:component-scan/&gt;`,能够构建出高效、灵活的Spring应用。

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

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

    Spring 自动扫描 不支持jar包 的解决方案

    NULL 博文链接:https://xinglu.iteye.com/blog/1457029

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

    然而,在配置过程中,如果遇到“元素 'context:component-scan' 的前缀 'context' 未绑定”的错误,这意味着Spring无法识别和解析这个元素,因为缺少了对应的命名空间定义。 这个问题的根源在于XML配置文件中没有...

    component-scan-spring:演示组件扫描

    "component-scan-spring"项目很显然是一个示例,用于演示如何在Spring应用中使用组件扫描。下面将详细阐述组件扫描的工作原理、优势以及如何在实际开发中应用。 **组件扫描的概念** 组件扫描(Component Scanning)...

    Spring 3.0所需jar文件和对应的配置文件

    nested exception is java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are ...

    pci-scan.rar_PCI scan_scan

    在Linux操作系统中,PCI(Peripheral Component Interconnect)总线是一种广泛使用的系统接口,用于连接各种设备,如网络适配器、显卡、声卡等。标题"pci-scan.rar_PCI scan_scan"暗示了这个压缩包可能包含与扫描和...

    学习ssm整理的xml配置笔记

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

    home-assistant-arpscan_tracker:该组件使用arp-scan liinux命令跟踪设备,它非常快速且相当准确

    这是用于家庭助手的自定义组件( ),它使用arp-scan linux命令跟踪设备,它非常快速且相当准确。 安装 HACS-推荐 安装了 ,这将使您轻松管理和跟踪更新。 搜索“ Arpscan”。 单击找到的集成下方的安装。 使用...

    Spring注释 注入方式源码示例,Annotation

    &lt;context:component-scan base-package="Mode"&gt;&lt;/context:component-scan&gt; //表示在包mode下面的类将扫描带有@Component,@Controller,@Service,@Repository标识符的类并为之注入对象。 据说是因为XML配置太烦锁而...

    Spring注解详解

    方式三:使用 `&lt;context:component-scan /&gt;` 命名空间注册注解处理器: ```xml &lt;context:component-scan base-package="com.example"/&gt; ``` 这将扫描指定的类包和其递归子包中的所有类,并将其注册到 Spring 容器中...

    spring3.0依赖注入详解

    本文将深入探讨Spring 3.0中依赖注入的新特性,特别是如何使用`@Repository`、`@Service`、`@Controller`和`@Component`注解来标记类为Bean,以及如何利用`&lt;context:component-scan/&gt;`元素自动扫描和注册这些Bean。...

    spring mvc

    本文将深入探讨`&lt;context:component-scan/&gt;`的使用,以及如何利用这一特性优化Spring MVC应用。 #### Spring组件扫描原理 在Spring中,`&lt;context:component-scan/&gt;`标签用于自动发现和加载带有特定注解的类,如`@...

    spring

    context:component-scan:作用是可以使用@ Component,@ Controller,@ Service等等来省略xml配置文件中的bean元素,简化配置 context:component-scan是上下文:annotation-config的超集,配置了前者则不需要配置...

    spring 的Annotation方式

    本文旨在深入探讨Spring框架中基于注解的依赖注入机制,特别是`@Repository`、`@Service`、`@Controller`和`@Component`等核心注解的使用方法,以及如何利用`&lt;context:component-scan&gt;`自动扫描功能,实现类级别的...

    springMVC技术概述

    配置使用注解的Handler和Service等等使用&lt;context:component-scan&gt; 不过springBoot已经省略了这些配置 常用注解:@Controller @RestController(Controller+ResponseBody) @Service @Transactional @Mapper @...

    spring annotation 入门

    - **组件扫描**:使用`&lt;context:component-scan&gt;`标签来指定要扫描的包路径,从而自动发现和注册带有`@Component`、`@Service`、`@Repository`、`@Controller`等注解的类。 - **示例**: ```xml &lt;context:...

    Spring Context测试

    学习spring组件扫描(Component Scanning)的代码 使用方法:直接把工程导入,直接Run ...&lt;context:component-scan base-package="com.test"&gt;&lt;/context:component-scan&gt; 2.在需要装配的类的上面全部加上@Component

Global site tag (gtag.js) - Google Analytics