spring组件<context:component-scan>详解

上篇文章我们引入注解,在配置中用到了<context:annotation-config/>有助于完全消除Spring配置中的<property>和<constructor-arg>元素,我们仍需要使用<bean>元素显示定义Bean。

但是Spring还有另一种技巧<context:component-scan>元素除了完成与<context:annotation-config>一样的工作,还允许Spring自动检测Bean和定义的Bean。这意味着不使用<bean>元素,Spring应用大多数(或者所有)Bean都能够实现定义和装配。

<context:component-scan
		base-package="cn.com.ztz.spring.*">
	</context:component-scan>

<context:component-scan>元素会扫描指定的包及其所有的子包,并查找出能够自动注册为Spring Bean的类。base-package属性标识了<context:component-scan>元素所扫描的包。

那么<context:component-scan>又是如何知道哪些类需要注册为Spring Bean呢?带着疑问,我们继续往下看:

1、为自动检测标注Bean

默认情况下<context:component-scan>查找使用构造型注解所标注的类,这些特殊的注解如下:

  • @Component
    通用的构造型注解,标识该类为Spring组件()
  • @Controller
    标识将该类定义为Spring MVC controller(控制层)
  • @Repository
    标识将该类定义为数据仓库(持久层)
  • @Service 标识将该类定义为服务(服务层,也就是业务层)

直接看下例子:

@Component
public class Roles {
	private int id=1;
	private String roleName="管理员";
	@Autowired
    private Users users;
	//重写toString方法,方便测试
	@Override
	public String toString() {
		return "Roles [id=" + id + ", roleName=" + roleName + ", users="
				+ users + "]";
	}
}
@Component
public class Users {
	private int id=2;
	private String name="张三";
	@Override
	public String toString() {
		return "Users [id=" + id + ", name=" + name + "]";
	}

}
<context:component-scan
		base-package="cn.com.ztz.spring.*">
</context:component-scan>

运行测试方法:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class SpringTest {
    @Autowired
    private Roles roles;
    @Test
    public void testSpring(){
       System.out.println(roles);
    }
}  

输出结果:

Roles [id=1, roleName=管理员, users=Users [id=2, name=张三]]

我们看到,Spring xml配置中完全消除了<bean>。

2、过滤组建扫描

<context:component-scan>提供两个子标签:<context:include-filter>和<context:exclude-filter>各代表引入和排除的过滤。

使用5种过滤类型的任意一种来定义组件扫描方式
Filter Type desc
annotation 过滤器扫描使用指定注解所标注的那些类。通过expression属性指定要扫描的注解
assignable 过滤器派生于expression属性所指定类型的那些类
aspectj 过滤器扫描于expression属性所指定的Aspectj表达式所匹配的那些类
custom 使用自定义的org.springframework.core.type.filter.TypeFilter实现类,该类由expression属性指定
regex 过滤器扫描类的名称于expression属性所指定的正则表达式所匹配的那些类

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-27 20:27:59

spring组件<context:component-scan>详解的相关文章

spring声明式事务配置详解

spring声明式事务配置详解 君子不器 2013年06月16日 编程世界 5273次阅读 查看评论 理解Spring的声明式事务管理实现 本节的目的是消除与使用声明式事务管理有关的神秘性.简单点儿总是好的,这份参考文档只是告诉你给你的类加上@Transactional注解,在配置文件中添加('<tx:annotation-driven/>')行,然后期望你理解整个过程是怎么工作的.此节讲述Spring的声明式事务管理内部的工作机制,以帮助你在面对事务相关的问题时不至于误入迷途,回朔到上游平静

Spring中的jar包详解

下面给大家说说spring众多jar包的特点吧,无论对于初学spring的新手,还是spring高手,这篇文章都会给大家带来知识上的收获,如果你已经十分熟悉本文内容就当做一次温故知新吧.spring.jar 是包含有完整发布的单个jar包,spring.jar中除了spring-mock.jar里所包含的内容外其他所有jar包的内容,因为只有在研发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的. 除了spring.jar文件,Spring还包括有其他1

Spring Bean的生命周期详解

Spring Bean的生命周期详解 Spring IoC容器的本质目的就是为了管理Bean,对于Bean而言,在容器中存在其生命周期,它的初始化和销毁也需要一个过程,下面主要对其生命周期进行一个详解的解释.生命周期主要是为了了解Spring IoC容器初始化和销毁Bean的过程,通过下图即可以掌握Spring IoC容器初始化与销毁Bean的过程. 通过上图,我们首先可以看到生命周期的步骤. 1)如果Bean实现了接口 BeanNameAware 的 setBeanName 方法,那么它就会调

Spring MVC 框架搭建及详解

一.Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar.spring-webmvc.jar.commons-logging.jar.cglib-nodep-2.1_3.jar Hibernate 3.6.8:hibernate3.jar.hibernate-jpa-2.0-api-1.0.1.Final.jar.antlr-2.7.6.jar.commons-collections-3

深入浅出Spring(二) IoC详解

上次的博客深入浅出Spring(一)Spring概述中,我给大家简单介绍了一下Spring相关概念.重点是这么一句:Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.在这句话中重点有两个,一个是IoC,另一个是AOP.今天我们讲第一个IoC. IoC概念 控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题. 它还有一个名字叫做依赖注入(Dependency Injection)

android四大基础组件--Service生命周期详解

android四大基础组件--ServiceService 生命周期详解 1.Service的生命周期: I> 在非绑定Service情况下,只有oncreate(),onStartCommand(),onDestory()方法情况下:  操作方法对应生命周期一: a.[执行startService(Intent)] 执行生命周期方法:oncreate()--->onStartCommand(): b.[执行stopService(Intent)] 执行生命周期方法:onDestory();

Spring Boot的启动器Starter详解

Spring Boot的启动器Starter详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs Spring Boot应用启动器基本的一共有44种,具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring-boot-starter-actuator 帮助监控和管理应用. 3)spring-boot-starter-amqp 通

超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享

原创不易,转载请注明出处:超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 代码下载地址:http://www.zuidaima.com/share/1759689106541568.htm 依赖注入,DI(Dependency Injection),它的作用自然不必多说,提及DI容器,例如spring,picoContainer,EJB容器等等,近日,google诞生了更轻巧的DI容器--Guice! 废话不多讲了,先看看Guice是如何实现

Spring AMQP 错误处理策略详解

1.介绍 异步消息传递是一种松耦合的分布式通信,在事件驱动体系结构实现中越来越受欢迎.幸运的是,Spring框架提供了Spring AMQP项目,可以帮助我们构建基于AMQP的消息传递解决方案. 另一方面,在这种环境中处理错误并不简单.本文将讨论错误处理策略. 2.配置环境 这里使用RabbitMQ实现AMQP标准.此外,Spring AMQP还提供了spring-rabbit模块,让集成更容易. RabbitMQ作为独立服务器运行.执行下面命令,在Docker容器中运行: docker run

Spring组件扫描&lt;context:component-scan/&gt;使用详解

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/sch