Spring 通过注解定义Bean以及自动扫描注解定义的bean ComponentScan 自动扫描组件&指定扫描规则

不管是xml还是注解,他们都是表达bean定义的载体,其实质都是为Spring容器提供Bean定义的信息,在表现形式上都是讲xml定义的内容通过类注解进行描述。

Spring容器成功启动的三大要件分别为:bean定义信息,bean实现类,spring本身。

如果采用基于xml的配置,则bean定义信息和bean实现类本身是分离的;而如果采用基于注解的配置文件,则bean定义信息通过在bean实现类上标注注解实现。

@Controller:用于对Controller实现类进行标注

@Repository:用于对DAO实现类精心标注

@Service:用于对Service实现类进行标注

Spring提供了一个context命名空间,他提供了通过扫描类包以应用注解定义Bean的方式。

如果仅希望扫描特定的类而非基包下的所有类,那么可以使用resource-pattern属性过滤出特定的类。

include-filter表示要包含的目标类,而exclude-filter表示要排除的目标类。use-default-filter属性,其默认值为true,表示默认会对标注@Component,@Controller,@Service,@Reposity的Bean进行扫描。

组件注册[email protected]自动扫描组件&指定扫描规则

以前的xml配置,是需要做包扫描的:

只要是标注了@Controller,@Service,@Repository,@Component的组件,都会被扫描进容器中。

xml中添加的配置信息为:

通过注解的方式,自动扫描组件

@ComponentScan(value="com.atguigu") value表示要扫描包com.atguigu,其中,com.atguigu是包名

excludeFilters 表示过滤器,扫描的时候,在该过滤器中的组件将会排出在spring容器外。

excludeFilters ={@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Service.class,Controller.class})}

这句话表示,Service,Controller这两个组件将会排除在spring容器外

type表示过滤的类型,这里用的是FilterType.ANNOTATION,表示按照注解排除

下面我们看运行结果:

没排除前(也就是没加过滤器,以及use-default-filter=true),spring容器中的组件为:

增加过滤器后excludeFilters ={@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Service.class,Controller.class})},spring容器中的组件为:

从上面的比对结果可以看出,excludeFilters 将Service,Controller都过滤在spring容器外了。

excludeFilters 表示扫描的时候,按照一定规则,排除哪些组件

includeFilters 表示扫描的时候,只需要包含哪些组件

只有禁用默认规则(默认规则表示扫描所有组件),includeFilters才会生效。useDefaultFilters = false

增加includeFilters后,输出为:

@ComponentScan(value = "com.atguigu", includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = { Controller.class})},useDefaultFilters = false)

增加过滤器includeFilters 后,输出为:

原文地址:https://www.cnblogs.com/ch-10/p/9738739.html

时间: 2024-10-10 17:00:20

Spring 通过注解定义Bean以及自动扫描注解定义的bean ComponentScan 自动扫描组件&指定扫描规则的相关文章

spring02-组件注册[email protected]自动扫描组件&指定扫描规则

上一篇我们讲到,讲@Bean注解标在某个方法上,那么ioc容器启动的时候就会将方法返回值放到ioc容器中 在开发中,实际上包扫描用的比较多,接下来我们会介绍两种方式一种是基于xml,一种是基于注解. 咱们先来xml的形式进行包扫描 这里我用的是spring suit tool 版本的eclipse,专门开发spring项目的 勾选上后会有自动提示的,包括创建的时候 这次就有提示了 <?xml version="1.0" encoding="UTF-8"?>

Spring中Bean的定义及作用域的注解实现

Classpath扫描与组件管理: 从Spring3.0开始,Spring JavaConfig项目提供了很多特性,包括使用java而不是xml定义bean,指的是注解 @Configuration,@Bean ,@Import ,@DependsOn @Component是一个通用注解,可用于任何bean @Repository:通常用于注解DAO类,即持久层 @Service:通常用于注解Service类,即服务层 @Controller:通常用于Controller类,即控制层MVC 元注

Spring学习九----------Bean的配置之Bean的定义及作用域的注解实现

Spring Bean常用注解 @Component:通常注解,可用于任何Bean @Repository:通常用于注解DAO层,即持久层 @Service:通常用于注解Service层,即服务层 @Controller:通常用于注解Controller层,即控制层 类的自动检测及Bean的注册 <context:component-scan base-package=""/>:自动扫描base-package定义的包或其子包下的类,并将带有@Component,@Cont

Spring学习(5)---Bean的定义及作用域的注解实现

Bean管理的注解实现 Classpath扫描与组件管理 类的自动检测与注册Bean <context:annotation-config/> @Component,@Repository,@Service,@Controller @Required @Autowired @Qualifier @Resource (一) Classpath扫描与组件管理 从Spring3.0开始,Spring javaConfig项目提供了很多特性,包括使用java而不是xml定义bean,比如:@Confi

Bean的定义及作用域的注解实现

Classpath扫描与组件管理: 从Spring3.0开始,Spring JavaConfig项目提供了很多特性,包括使用java而不是xml定义bean,指的是注解 @Configuration,@Bean ,@Import ,@DependsOn @Component是一个通用注解,可用于任何bean @Repository:通常用于注解DAO类,即持久层 @Service:通常用于注解Service类,即服务层 @Controller:通常用于Controller类,即控制层MVC 元注

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.

Spring学习(13)--- 基于Java类的配置Bean 之 @Configuration &amp; @Bean注解

基于Java配置选项,可以编写大多数的Spring不用配置XML,但有几个基于Java的注释的帮助下解释.从Spring3.0开始支持使用java代码来代替XML来配置Spring,基于Java配置Spring依靠Spring的JavaConfig项目提供的很多优点.通过使用@Configuration, @Bean ,@Import ,@DependsOn 来实现Java配置Spring. 1) @Configuration & @Bean 注解: 在Spring的新的Java-Configu

Spring学习(三)Spring Bean装配(常用注解)

注册与管理Bean=======================================·从 Spring3.0开始, Spring Java Config项目提供了很多特性包括使用ava而不是XML定义bean,比如 @ Configuration, @Bean, @Import, @Dependson·@ Componenti是一个通用注解,可用于任何bean·@ Repository,@ Service,@ Controller是更有针对性的注解 [email protected]

Spring 源码(九)@Autowired注解实现原理(Spring Bean的自动装配

@Autowired注解的实现过程,其实就是Spring Bean的自动装配过程.通过看@Autowired源码注释部分我们可以看到@Autowired的实现是通过AutowiredAnnotationBeanPostProcessor后置处理器中实现的. AutowiredAnnotationBeanPostProcessor 类图 PriorityOrdered:确认 AutowiredAnnotationBeanPostProcessor 后置处理器的执行优先级 BeanFactoryAw