转载自:http://blog.csdn.NET/chunqiuwei/article/details/16115135
在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的Java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean。(不会扫描AOP相关注解)
注意:如果配置了<context:component-scan>那么<context:annotation-config/>标签就可以不用再xml中配置了,因为前者包含了后者。另外<context:component-scan>还提供了两个子标签:
- <context:include-filter>
- <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框架中,`<context:component-scan/>`元素是核心组件扫描的基石,它允许我们自动检测和注册...在实际项目中,结合使用`@Component`家族注解和`<context:component-scan/>`,能够构建出高效、灵活的Spring应用。
<context:component-scan base-package="com.makelove88.**.dao,com.makelove88.**.service" /> <import resource="classpath*:*/applicationContext-*.xml" /> </beans> ``` 在这个修正后的配置中,我们添加了 ...
Spring 组件扫描<context:component-scan/>使用详解 在 Spring 框架中,组件扫描是指通过注解和 XML 配置来自动检测和加载Bean的过程。下面将详细介绍<context:component-scan/>标签的使用方式和原理。 一、...
</context:component-scan> ``` 使用注解过滤某些类: ```xml <context:component-scan base-package="com.example"> <context:include-filter type="annotation" expression="org.springframework.stereotype....
<context:component-scan base-package="com.example.service"/> ``` #### 五、实现业务逻辑 根据需求,需要实现用户数据的CRUD操作。可以通过以下步骤来实现: 1. **实体类**:设计User类,包含用户名、密码等...
</context:component-scan> ``` 2. **数据库连接配置**:我们需要从`jdbc.properties`文件中读取数据库连接信息。使用`context:property-placeholder`标签将属性文件加载到Spring上下文中。然后,配置数据源`...
<context:component-scan base-package="com.example.ssm.controller" /> ``` 3. **Web.xml 配置**: - 配置`ContextLoaderListener`和`DispatcherServlet`。 - 示例代码如下: ```xml <listener> <listener...
<context:component-scan base-package="com.example.controller"/> <!-- 视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property ...
在上面的配置文件中,我们使用了 `<context:annotation-config/>` 和 `<context:component-scan base-package="testspring.main"/>` 两个标签。 `<context:annotation-config/>` 用于启用注释型的 IOC,而 `<context...
- **扫描包含Controller的包**:通过`<context:component-scan>`元素指定需要扫描的包。 - **不处理静态资源**:通过`<mvc:default-servlet-handler/>`让Servlet容器处理静态资源。 - **启用注解驱动**:使用`<mvc:...
<context:component-scan base-package="com.example.demo.controller" /> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" ...
在这个主题中,我们将深入探讨`<context:annotation-config>`与`<context:component-scan>`的区别,事务管理器的配置,以及Spring开发环境的选择和数据源的配置。 1. `<context:annotation-config>`和`<context:...
<context:component-scan base-package="com.example.controller" /> ``` 其中`base-package`属性指定了控制器所在的包名。 - **配置事务管理器** 如果项目中涉及数据库操作,还需要配置事务管理器。 ```...
在本节中,我们将探讨 SSM 框架中 XML 配置的使用,特别是事务配置和 `<context:component-scan>` 的使用。 一、事务配置 在 SSM 框架中,事务配置是非常重要的,用于确保数据的一致性和安全性。在 XML 配置文件中...
通过使用`<context:component-scan>`标签配合特定的注解(如`@Component`、`@Service`等),可以完全避免XML配置的使用,从而让开发者能够更加专注于业务逻辑的实现。同时,Spring对JSR-250和JSR-330等标准的支持也...
在Spring MVC配置文件中,需要添加`<context:component-scan>`元素来指定需要扫描的包,这样Spring才能找到所有的控制器类。如: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi...
<context:component-scan base-package="com.bbs"/> <!--注解支持--> <mvc:annotation-driven/> <!--视图解析--> <bean id="viewResolver" class="org.springframework.web.servlet.view....
配置使用注解的Handler和Service等等使用<context:component-scan> 不过springBoot已经省略了这些配置 常用注解:@Controller @RestController(Controller+ResponseBody) @Service @Transactional @Mapper @...
2. `<context:component-scan>`: - 这个元素告诉Spring扫描指定包及其子包,寻找带有`@Controller`注解的类,并将它们作为bean进行管理。 3. `<mvc:annotation-driven>`(通常也会包含,但此处未提供): - 这个...