SpringBoot —— @ComponentScan注解

文章目录

  • 一、作用
  • 二、注解属性说明
  • 三、使用方式


一、作用

主要是从定义的扫描路径中,找出标识了需要装配的类自动装配到Spring的bean容器中。

简单的说就是 @ComponentScan告诉Spring从哪里找到bean,一旦指定了,Spring就会将指定的包及其下级的包中寻找bean。

在SpringBoot项目中,我们并没有显示的看到该注解,但是仍然能扫描到bean呢?

其实,在创建SpringBoot项目中,默认在启动类上添加了@SpringBootApplication注解,该注解中包含@ComponentScan注解,因此SpringBoot会自动帮我们扫描启动类所在的包。


二、注解属性说明

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {/*** 对应的包扫描路径 可以是单个路径,也可以是扫描的路径数组* @return*/@AliasFor("basePackages")String[] value() default {};/*** 和value一样是对应的包扫描路径 可以是单个路径,也可以是扫描的路径数组* 如果为空,则以@ComponentScan注解的类所在的包为基本的扫描路径* @return*/@AliasFor("value")String[] basePackages() default {};/*** 指定具体的扫描的类* @return*/Class<?>[] basePackageClasses() default {};/*** 对应的bean名称的生成器 默认的是BeanNameGenerator* @return*/Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;/*** 处理检测到的bean的scope范围*/Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;/*** 是否为检测到的组件生成代理* Indicates whether proxies should be generated for detected components, which may be* necessary when using scopes in a proxy-style fashion.* <p>The default is defer to the default behavior of the component scanner used to* execute the actual scan.* <p>Note that setting this attribute overrides any value set for {@link #scopeResolver}.* @see ClassPathBeanDefinitionScanner#setScopedProxyMode(ScopedProxyMode)*/ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;/*** 控制符合组件检测条件的类文件   默认是包扫描下的  **/*.class* @return*/String resourcePattern() default ClassPathScanningCandidateComponentProvider.DEFAULT_RESOURCE_PATTERN;/*** 是否对带有@Component @Repository @Service @Controller注解的类开启检测,默认是开启的* @return*/boolean useDefaultFilters() default true;/*** 指定某些定义Filter满足条件的组件 FilterType有5种类型如:*          ANNOTATION, 注解类型 默认*          ASSIGNABLE_TYPE,指定固定类*          ASPECTJ, ASPECTJ类型*          REGEX,正则表达式*          CUSTOM,自定义类型* @return*/Filter[] includeFilters() default {};/*** 排除某些过来器扫描到的类* @return*/Filter[] excludeFilters() default {};/*** 扫描到的类是都开启懒加载 ,默认是不开启的* @return*/boolean lazyInit() default false;
}

三、使用方式

启动类

package com.springboottest;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;@SpringBootApplication
public class SpringbootTestApplication {public static void main(String[] args) {SpringApplication.run(SpringbootTestApplication.class, args);}
}

启动类在 com.springboottest 包下,那么Spring默认会自动扫描该包及其子包下的bean。

Student类(包路径:com.springtest,非启动类所在的包下):

package com.springtest;import lombok.Data;
import org.springframework.stereotype.Component;@Data
@Component
public class Student {private String name;private String nickName;
}

如果想让Student类被Spring扫描到,那么我们可在启动类中增加如下注解:

package com.springboottest;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;@SpringBootApplication
@ComponentScan(basePackages = {"com.springtest", "com.springboottest"})
// @ComponentScan(basePackages = {"com"})
public class SpringbootTestApplication {public static void main(String[] args) {SpringApplication.run(SpringbootTestApplication.class, args);}
}

上面的代码我们可以看到,@ComponentScan注解中设置了两个包名("com.springtest", "com.springboottest"),这样设置是为了精确扫描范围,当然我们也可以使用两个包名的共同前缀com

注:如果需要扫描的类在不同的包下,最好是精确指定要扫描的包,这样可以减少加载时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬盘 相关知识

磁盘存储数据于轨道上&#xff0c;为了防止数据不被干扰&#xff0c;轨道之间是存在间隙的。如果间隙越小存储的数据越多&#xff0c;但是对数据的写入和读取所使用的磁头是不一样的&#xff0c;写入的磁头比较宽&#xff0c;读取的磁头比较窄。叠瓦式硬盘&#xff0c;将轨道和…

Java 序列化反序列化框架比较

文章目录一、简介二、序列化框架1、JDK2、XML序列化3、JSON序列化4、Hessian5、Avro序列化6、Kyro序列化7、Protostuff三、序列化框架对比测试1、对象准备2、JDK方式3、FastJson方式4、Hessian方式5、Protostuff方式6、测试代码四、总结五、序列化应用场景六、注意事项一、简介…

C++primer 第 2 章 变量和基本类型

2.1 基本内置类型 算术类型&#xff08;arithmetictype&#xff09;和空类型&#xff08;void&#xff09;在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值&#xff0c;仅用于一些特殊的场合&#xff0c;例如最常见的是&#xff0…

codeforces 58A-C语言解题报告

58A题目网址 题目解析 1.输入字符串,问如果删去其中的一些自发,能否得到hello,如果能就输出YES,否则输出NO 举例: 输入: ahhellllloou 输出: YES 2.注意点: 因为C语言没有java中的匹配字符串,则新建立一个 word[6]“hello”; 在循环中使用word去与s匹配,当匹配到了就 count…

ClickHouse 客户端命令

文章目录一、简介二、常用命令1、连接命令2、SQL语法&#xff08;1&#xff09;查看数据库列表&#xff08;2&#xff09;查看当前使用的数据库&#xff08;3&#xff09;查看数据库中表列表&#xff08;4&#xff09;创建数据库&#xff08;5&#xff09;创建表&#xff08;6&…

2000年考研英语阅读理解文章三

文章详细解析 注意点 1.当作者在文章中写到:实际问题是:我们从根本上改变了吗? 说明:我们没有发生根本上的改变,作者不同意前文中的未来派诗歌 知识点 ----单词 unhampered adj无阻碍的 finite adj有限的 ink n墨水 corresponding adj相应的,符合的 upsetting adj令人生厌…

SpringBoot 集成Mybatis

文章目录一、创建SpringBoot项目二、添加Mybatis相关依赖三、数据源配置四、创建事务的模型实体类五、创建和数据库交互联系的映射关系类六、创建业务接口和实现类七、创建控制器类八、请求验证一、创建SpringBoot项目 如何创建详见&#xff1a;IDEA 创建 SpringBoot 项目 二、…

C++primer 第 3 章 字符串、向量和数组 3.1 命名空间的using声明 3.2标准库类型string

引言 除了第2章介绍的内置类型之外,C语言还定义了 -个内容丰富的抽象数据类型库。其中,string和 vector是两种最重耍的标准库类型&#xff0c;前者支持可变长字符串&#xff0c;后者则 表示可变长的集合。还有…种标准库类型是迭代器&#xff0c;它是string和vector的配套类型…

ClickHouse 四舍五入函数

文章目录一、round(x[,N])二、floor(x[,N])三、ceil(x[,N]),ceiling(x[,N])四、trunc(x[, N]), truncate(x[, N])一、round(x[,N]) 说明&#xff1a;将值取整到指定的小数位数&#xff0c;该函数按顺序返回最近的数字。 语法&#xff1a; round(expression [, decimal_place…

codeforces 59A-C语言解题报告

59A题目网址 题目解析 1.输入字符串,如果大写字母最多,则全部输出为大写;如果小写字母多或大小写字母一样多,则全部输出为小写 举例: 输入: maTRIx 输出: matrix 2.使用a,b两个变量去记录大小写字母的数量 代码 #include<stdio.h> #include<stdlib.h> #includ…

C++primer 第 3 章 字符串、向量和数组 3 . 3 标准库类型vector

标准库类型vector表示对象的集合&#xff0c;其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引&#xff0c;索引用于访问对象。因为vector"容纳着”其他对象&#xff0c;所以它也常被称作容器(container).第 II部将对容器进行更为详细的介绍。 要想使用…

SpringBoot AOP切面实现

文章目录一、AOP简介二、AOP体系与概念三、AOP实例1、创建SpringBoot工程2、添加依赖3、AOP相关注解3.1、Aspect3.2、Pointcut3.2.1、execution()3.2.2、annotation()3.3、Around3.4、Before3.5、After3.6、AfterReturning3.7、AfterThrowing一、AOP简介 AOP&#xff08;Aspec…

英语口语-文章朗读Week8 Friday

文章 It is a phenomenon that people are losing trust in each other in today’s society. Some people become selfish,and for interest, they are likely to betray their colleagues,friends, and even their relatives. They tend to cater to those who can benefit …

C++primer 第 3 章 字符串、向量和数组 3 . 4 迭代器介绍

3.4迭代器介绍 我们已经知道可以使用下标运算符来访问string对象的字符或vector对象的元素&#xff0c;还有另外一种更通用的机制也可以实现同样的目的&#xff0c;这就是迭代器&#xff08;iterator&#xff09;。在第II部分中将要介绍&#xff0c;除了vector之外&#xff0c…

ClickHouse 函数

文章目录一、日期函数1、时间或日期截取函数&#xff08;返回非日期&#xff09;2、时间或日期截取函数&#xff08;返回日期&#xff09;3、日期或时间日期生成函数二、类型转化类函数1、精度保留&#xff08;非四舍五入&#xff09;2、字符串转化为整数&#xff08;非整数的字…

英语口语-文章朗读Week9 TuesDay

朗读文章 People living in ancient times had no alternative but to do housework manually. They fire the wood when they cook,they hand wash clothes with hands; they sweep the floor with brooms. Now, modern inventions come as a great relief to people. We co…

SpringBoot @Value注解

目录一、非配置文件注入1、注入普通字符串2、注入JAVA系统变量3、注入表达式4、注入其他Bean属性5、注入文件资源6、注入URL资源二、通过配置文件注入1、注入普通字符串2、注入基本类型3、注入数组类型4、注入List类型5、注入Map类型一、非配置文件注入 1、注入普通字符串 直…

C++primer 第 3 章 字符串、向量和数组 3 . 5 数组

3.5数组 数组是一种类似于标准库类型vector&#xff08;参见3.3节&#xff0c;第86页&#xff09;的数据结构&#xff0c;但是在性能和灵活性的权衡上又与vector有所不同。与vector相似的地方是&#xff0c;数组也是存放类型相同的对象的容器&#xff0c;这些对象本身没有名字…

codeforces 122A-C语言解题报告

122A题目网址 题目解析 1.输入数字(在1000以内),若能被4,7幸运数整除或只含4,7则输出YES,否则输出NO 举例: 输入: 107 输出: NO 2.解题关键: 1)使用列举法,把所有符合的幸运数列出来(int number[]) 1—2 2–224 3–22*28 24814个 2)若n是幸运数中的一个或n%幸运数0,则为YES…

SpringBoot @Value给静态变量注入值

文章目录一、简介二、Value给静态变量注入值方案一&#xff1a;set()方法设置方案二&#xff1a;PostConstruct注解修饰的方法中进行赋值三、总结一、简介 SpringBoot 中给普通变量注入值只需在变量上添加 Value 注解即可。 application.properties 配置文件有如下配置&#…