生成bean的注解@Component极其衍生和@ComponentScan@Configuration

news2024/9/22 13:29:34

@Component

Spring 2.5 以后,除了提供基本的 @Component 注解之外,还提供了 @Service @Controller @Repository 三个注解。在 Spring 源码中,后面三个注解都在开始部分引入了 @Component 注解,除此以外这四个注解的源码内容没有任何区别,因此后面的这三个注解与 Component 的作用是一样的。之所以要额外的引出这三个注解,是为了更好的与 Web 开发中常用的三层结构相对
@Component是@Service @Controller @Repository三个注解的元注解(见下图),四个都表示创建bean对象.

此外还有@RestController注解,也经常用,也是@Component的延伸。

 

@Configuration

 @Configration也是创建bean对象,元注解也是@Component

表示一个类声明了一个或多个@Bean方法(就是一个方法将返回值作为bean),并可由Spring容器处理,以便在运行时为这些Bean生成Bean定义和服务请求。

 @Configuration
 public class AppConfig {

     @Bean
     public MyBean myBean() {
         // instantiate, configure and return bean ...
     }
 }

也就是@Configuration注解的类是用来生成bean的,一个@bean标注的函数对应一个bean,其通常被用来导入组件,就是因为要将组件定义为bean才能发挥作用。

@ComponentScan作用

 参考https://www.cnblogs.com/east7/p/14390877.html

@ComponentScan注解主要是从约定的扫描路径中,识别标注了组件注册注解的类(也就是@Component及其延伸注解),并且把这些类自动注册到spring IoC容器中,这些类就是我们通常所言的bean。IoC容器是Spring的特色之一,可以使用它管理bean。当然,@Configration注解修饰的类也会被托管给IoC容器。

组件扫描路径

  注解@ComponentScan 如果不设置value属性,默认扫描路径是启动类 XxxApplication.java 所在目录及其子目录(在一个包都不行,必须在同一个目录下),此外,所以最好还是配置value属性,减少加载时间,提高系统启动速度。

经代码验证,如果指定了@ComponentScan,那么默认的组件搜索路径会失效

  比如启动类在包 com.eg.wiener 下面,那么项目启动时,会默认扫描wiener包及其子包下的所有类。也就是说,即便不明确标注@ComponentScan,Spring Boot也会自动搜索当前应用主入口目录及其下方子目录。如果其它包中的bean 不在当前主包路径下面,则应使用@ComponentScan设置value属性,配置扫描路径。如果定义了错误的扫描路径,那么在使用注解@Autowired自动装配Bean时会出错,报a bean of type that could not be found错误。

配置扫描路径

  @ComponentScan注解既可以扫描包,也可以扫描指定的类。我们只需要指定一个需要扫描的路径,就可以达到更改扫描路径的目的。

  1. 包路径

  通过value属性设置需要扫描的包:

@ComponentScan({"com.company.user","com.company.service"})

  1. 类路径

  通过basePackageClasses属性指定需要扫描的类:

@ComponentScan(basePackageClasses={XxxService.class, YyyService.class})

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

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

相关文章

Json介绍

文章目录 1. 什么是 JSON?2. JSON语法格式3. JSON在Java中的用途3.1 FastJSON1. FastJSON概述与下载2. FastJSON常用方法 3.2. Jackson1. Jackson下载与使用2. Jackson常用类与方法3. ObjectMapper类常用方法 1. 什么是 JSON? JSON:JavaScript Object N…

C语言函数大全-- _w 开头的函数(2)

C语言函数大全 本篇介绍C语言函数大全-- _w 开头的函数 1. _wexecl 1.1 函数说明 函数声明函数功能int _wexecl(const wchar_t *path, const wchar_t *arg0, ... /* , const wchar_t *arg1, ..., NULL */);它是一个 Windows 平台下的 C 标准库函数,用于在新进程…

〖大学生·技术人必学的职业规划白宝书 - 职业规划篇②〗- 进入职场前必须要考虑的问题

历时18个月,采访 850 得到的需求。 不管你是在校大学生、研究生、还是在职的小伙伴,该专栏有你想要的职业规划、简历、面试的答案。说明:该文属于 大学生技术人职业规划白宝书 专栏,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社…

leecode106——使用中序遍历和后序遍历构造一棵二叉树

leecode106 中序遍历和后序遍历构造一棵二叉树 🔎中序遍历和后续遍历的性质 在后序遍历中,最后一个元素二叉树的根节点 在中序遍历序列中,根节点的左边为左子树,右边为右子树 🔎1.二叉树的还原过程描述 1.首先&am…

HTTP协议基本格式

HTTP协议基本格式 TCP/IP的分层管理HTTP的基本格式 TCP/IP的分层管理 TCP/IP协议族里重要的一点就是分层。TCP/IP协议族按层次分别分为5层: 应用层、传输层、网络层、数据链路层、物理层。 TCP/IP层次化的好处。 如果互联网只由一个协议统筹,某个地方需…

不动点定理的及其有趣应用

最近读高观点下的数学这本书,对书中介绍的布劳威尔不动点定理的有趣性质印象很深,原因是这个定理的某些性质能够解释我们生活中的一些常见现象,这里结合一个例题,聊以记录。 从一个数学题讲起: f(x)是定义在[0,1]上的…

IPB60R099CP-ASEMI代理英飞凌高压MOS管IPB60R099CP

编辑:ll IPB60R099CP-ASEMI代理英飞凌高压MOS管IPB60R099CP 型号:IPB60R099CP 品牌:英飞凌 封装:TO-263 最大漏源电流:31A 漏源击穿电压:600V RDS(ON)Max:99mΩ …

【MySQL】MySQL百万数据深度分页优化思路分析

文章目录 一、业务背景二、瓶颈再现三、问题分析回表覆盖索引IOLIMTI 2000,10 ? 四、问题总结五、解决方案优化前后性能对比 一、业务背景 一般在项目开发中会有很多的统计数据需要进行上报分析,一般在分析过后会在后台展示出来给运营和产品进行分页查看…

软考A计划-真题-分类精讲汇总-第十五章(数据库设计)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

如何做到乡村振兴?主要包括以下几点

乡村振兴是现代化发展的常记口号,也是中国整体经济发展的必备条件,乡村振兴是一个多元化的问题,其中包含人文、经济、文化、生态、人才等,那么如何做到乡村振兴呢? 主要包括以下几点: 1.合理利用土地资源…

SpringBoot配置文件敏感信息加密(四十六)

新的生活会开始,直到完成自己的目标. 一. 配置文件敏感信息加密 我们以前在编写 application.yml 文件时,服务器的ip, 数据库的配置,Redis的密码配置等都是明文,这是很不安全的。 我们可以通过 jasypt-spring-boot-starter 插件进…

Python学习26:个人所得税计算器

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 2018年10月1日以前&#xff…

Java 性能调优全攻略:步骤、工具、技巧一网打尽

Java性能调优是一项非常重要的工作,它可以提高应用程序的性能和可伸缩性,并确保应用程序在高负载情况下仍然能够快速、稳定地运行。 1、Java性能调优步骤 Java性能调优的主要步骤包括: 确定目标:首先需要明确性能调优的目标&…

提高数据的安全性和可控性,数栈基于 Ranger 实现的 Spark SQL 权限控制实践之路

在企业级应用中,数据的安全性和隐私保护是极其重要的。Spark 作为数栈底层计算引擎之一,必须确保数据只能被授权的人员访问,避免出现数据泄露和滥用的情况。为了实现Spark SQL 对数据的精细化管理及提高数据的安全性和可控性,数栈…

多维时序 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多变量时间序列预测

多维时序 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多变量时间序列预测 目录 多维时序 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多变量时间序列预测预测结果基本介绍模型特点程序设计学习总结参考资料 预测结果 基本介绍 多维时序 | MATLAB实现CN…

C++进阶——红黑树

C进阶——红黑树 概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过 对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩 倍&…

五分钟读完一本书 --《小王子》

所有的大人都曾经是小孩。 它是写给大人的童话。是一本用最简单纯净的文字,却将爱与羁绊描写得及其深刻的书。 看东西只有用心才能看得清楚,重要的东西用眼睛是看不见的。 这是踏遍7个星球之后 小王子才明白的道理。 小王子的B612星球小到只有一栋房子那…

小程序容器助力智能移动门户统一

智能移动统一门户遵循“统一规划,统一标准,统一建设,统一运维”的指导思想。它灵活运用前端展示平台,微服务后端平台,流程引擎,规则引擎,非结构化数据平台,即时通讯平台,…

Matlab论文插图绘制模板第92期—折线图(Plot)

之前有分享过Matlab折线图的绘制模板: 但随着技术力的提升,发现很多地方还有待改进,于是便有了本期内容。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有需…

电子企业应如何规划数字化工厂管理系统

随着科技的不断进步和市场竞争加剧,越来越多的电子企业开始意识到数字化工厂的重要性。数字化工厂管理系统是利用信息技术和自动化技术,对生产全过程进行数字化、智能化和自动化的工厂。它将生产过程中的各个环节进行有机整合,从而提高生产效…