`
yangshubao
  • 浏览: 4175 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

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

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

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

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

    Spring注解详解

    &lt;/context:component-scan&gt; ``` 使用注解过滤某些类: ```xml &lt;context:component-scan base-package="com.example"&gt; &lt;context:include-filter type="annotation" expression="org.springframework.stereotype....

    springMVC框架搭建及详解

    &lt;context:component-scan base-package="com.example.controller"/&gt; &lt;!-- 视图解析器 --&gt; &lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property ...

    Test05_Spring_Context_XML.rar

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

    SSH全注解环境搭建

    &lt;context:component-scan base-package="com.zhaolongedu"/&gt; ``` - 配置Spring事务管理器: ```xml &lt;bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"&gt;...

    spring4-hibernate4-struts2整合

    &lt;context:component-scan base-package="me.gacl.dao,me.gacl.service"/&gt; &lt;/beans&gt; ``` 4. **创建配置属性文件**(`config.properties`): - 这个文件通常用于存储数据库连接信息、其他配置参数等。 - 示例...

    框架ssm整合

    &lt;context:component-scan base-package="com.example.service"/&gt; ``` #### 五、实现业务逻辑 根据需求,需要实现用户数据的CRUD操作。可以通过以下步骤来实现: 1. **实体类**:设计User类,包含用户名、密码等...

    Spring MyBatis 整合

    &lt;context:component-scan base-package="com.example.service"/&gt; &lt;/beans&gt; ``` #### 六、编写实体类、DAO层与Service层 1. **实体类**:定义业务对象。 2. **DAO层**:定义Mapper接口,使用MyBatis注解或XML...

    Spring MVC3构建Web应用详解

    &lt;context:component-scan base-package="com.adobocode.controller" /&gt; &lt;!-- 配置视图解析器 --&gt; &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name="prefix...

    spring mvc基础

    &lt;context:component-scan base-package="com.example.controller"/&gt; &lt;!-- 其他配置... --&gt; &lt;/beans&gt; ``` - **2.3 Spring 配置文件** Spring配置文件通常用于管理Bean的生命周期,以及配置数据源、事务管理等...

    maven搭建SSM框架

    &lt;context:component-scan base-package="com.example.ssm.controller" /&gt; ``` 3. **Web.xml 配置**: - 配置`ContextLoaderListener`和`DispatcherServlet`。 - 示例代码如下: ```xml &lt;listener&gt; &lt;listener...

    开发框架搭建

    &lt;context:component-scan base-package="cn.springmvc"/&gt; &lt;!-- 配置MyBatis SqlSessionFactory --&gt; &lt;bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&gt; &lt;property name=...

    spring3.0依赖注入详解

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

    springmvc+mybatis+oracle

    &lt;context:component-scan base-package="com.example.controller" /&gt; &lt;!-- 自定义拦截器配置 --&gt; &lt;mvc:interceptors&gt; &lt;bean class="com.example.interceptor.MyInterceptor" /&gt; &lt;/mvc:interceptors&gt; &lt;/beans&gt; ...

    SpringMVC入门

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

    SpringMVC笔记

    &lt;context:component-scan base-package="com.example.springmvc.controller"/&gt; &lt;!-- 视图解析器 --&gt; &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name=...

    ssm框架的搭建

    &lt;context:component-scan base-package="com.zuxia"/&gt; &lt;!-- 加载资源文件 --&gt; &lt;context:property-placeholder file-encoding="utf-8" location="classpath:db.properties"/&gt; &lt;!-- 数据源配置 --&gt; &lt;bean id=...

Global site tag (gtag.js) - Google Analytics