SpringBoot中Bean注册

Bean注解

Springboot中默认扫描启动类所在的包及其子包。

比如这里的DemoApplication是启动类,那么spring boot默认扫描com.example.demo这个包。

Controller、Service、Repository这三个注解是Component的衍生注解,它们经常会被添加到Controller层、Service层以及DAO层的类上,从而让代码的可读性更高。


如果要注册的bean对象来自第三方,不是自定义的,无法用@Component 及衍生注解声明bean的。应该用@Bean和@Import。


@Bean

@Bean 注解的作用就是告诉Spring IOC容器,下面定义的这个对象是一个容器。

对象默认的名字是方法名

运行启动类输出的对象的名字可以获取到。

如果不想用方法名,要改对象的名字也可以,就设置别名。在@Bean后面加上括号,括号里面的字符串的内容就是别名。比如这里的方法名是"province",不想用这个,而是用"aa"。

那么就把下面框中的getBean(“province”)换成getBean(“aa”),再运行启动类输出对象的名字也一样。不过一般都是用默认的对象名也就是方法名


@Import

@Import

  • 导入 配置类
  • 导入 Importselector 接口实现类

比如导入CommonConfig类

如果要导入的类很多,就得再@Import()中写很多个,就不美观。我们就用导入 Importselector 接实现类,这样启动类上就写这个接口的实现类CommonlmportSelector的class。

这样当springboot工程启动后,就先扫描import,然后去找到这个CommonlmportSelector实现类,自动执行selectlmports方法,得到这些类名,把这些类名对应的对象注入到IOC容器中。


SpringBoot还提供了设置注册生效条件的注解 @Conditional


@ConditionalOnProperty

比如这里@ConditionalOnProperty(prefix = "country",name = {"name","system"})。如果配置文件中配置了country.name和country.system,则注入。否则不注入。

我们先使配置文件中没有配置country.name和country.system。这里注释掉了也就是相当于没有配置。

我们去启动类中运行。看是否能获取Country对象。

报错,显示

No qualifying bean of type 'cn.itcast.pojo.Country'available

说明这个country对象我们并没有声明,它找不到,也就是我们设置的条件生效了

我们再把配置文件中的注释去掉,也就是配置了country.name和country.system,那么理论上就可以注入这个对象到IOC容器中,那么就可以在启动类中获取到。

我们再去运行启动类,发现可以获取了。

以上就是@ConditionalOnProperty注解。

@ConditionalOnMissingBean与@ConditionalOnProperty相反。


希望这篇文章能帮助到你^_^加油加油

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

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

相关文章

什么是EDM邮件推广营销?

电子邮件作为最古老的互联网沟通工具之一,凭借其无可比拟的直达性、个性化潜力与高投资回报率,始终占据着企业营销策略的核心地位。随着人工智能技术的革新应用,云衔科技以其前瞻视野与深厚技术底蕴,倾力打造了一站式智能EDM邮件营…

机器学习实战17-高斯朴素贝叶斯(GaussianNB)模型的实际应用,结合生活中的生动例子帮助大家理解

大家好,我是微学AI,今天给大家介绍一下机器学习实战17-高斯朴素贝叶斯(GaussianNB)模型的实际应用,结合生活中的生动例子帮助大家理解。GaussianNB,即高斯朴素贝叶斯模型,是一种基于概率论的分类算法,广泛应…

免杀对抗-安全工具篇新型Go架构C2-Sliver多平台上线模式红队集成研究免杀方向

首先,你需要分析: 1、安全工具是否有源代码 2、安全工具源代码逻辑复杂程度 3、当前源代码你是否有能力修改 其次,你需要考虑: 1、无源码或无能力修改 2、各种异常bug打包问题 3、修改打包后效果也不太好 故: 1、非源码…

VScode使用Prettier格式化代码

1、安装Prettier插件 2、扩展设置 3、设置.prettierrc.json配置文件路径 4、.prettierrc 配置文件 .prettierrc.json 是 Prettier 格式化工具的配置文件,用于指定代码格式化的规则和风格。下面是一些可能的配置选项,请自行选择: {"prin…

MetaGPT部分源码解读--Memory

storage: list[SerializeAsAny[Message]] []index: DefaultDict[str, list[SerializeAsAny[Message]]] Field(default_factorylambda: defaultdict(list))ignore_id: bool False storage 属性是一个列表,用于存储消息对象。每个消息对象都被标记为 SerializeAsAn…

Yarn与Zookeeper的介绍

Yarn--三大调度策略 FIFO(先进先出): 目前几乎已经没有人使用了. 类似于: 单行道. 好处: 每个计算任务能独享集群100%的资源. 弊端: 不能并行执行, 如果大任务过多, 会导致小任务执行时间过长. Capacity(容量调度): 我们用…

找到矩阵中位于降序15%位置的值

MATLAB实现 clc clearvars; matrix randn(10, 10); % 一个示例矩阵 disp(matrix)value find_value_at_15_percent(matrix); disp([位于降序中15%位置的值为: , num2str(value)]);% 验证 xreshape(matrix,1,100); ysort(x,descend); y(1:16)function value_at_15_percent fi…

缓存(反向代理)服务器-varnish

varnish简介: varnish是一款高性能且开源的反向代理服务器和HTTP加速器,(其实就是带缓存的反向代理服务器)它可以把整个HTTP响应内容缓存到内存或文件中,从而提高web服务器器的响应速度。 与传统的squid相比&#xff0…

【Java后端开发】教程及案例

Java后端开发是软件开发中的一个重要领域,它涉及到服务器端的程序设计、数据库交互、API开发、安全性处理等多个方面。以下是关于Java后端开发的教程和案例的详细介绍: ### Java后端开发基础 #### 1. Java基础知识 - 掌握Java基础语法、面向对象编程、…

压测Nginx时对Linux内核参数优化,以支持更高的并发

文章目录 Linux内核参数优化参数意义解析注意事项 Linux内核参数优化 编辑/etc/sysctl.conf文件 fs.file-max 999999 net.ipv4.tcp_tw_reuse 1 net.ipv4.tcp_keepalive_time 600 net.ipv4.tcp_fin_timeout 30 net.ipv4.tcp_max_tw_buckets 5000 net.ipv4.ip_local_port_…

如何提高图片的分辨率?dpi修改工具推荐

在调整分辨率之前,我们需要了解什么是dpi分辨率,简单来说,分辨率是指图像中包含的像素数量,分辨率越高,图像就越清晰,常见的分辨率包括72dpi、96dpi和300dpi等,在打印照片或者一些考试平台对图片…

02-JDK新特性-泛型

泛型 什么是泛型 泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译是检测到非法的类型。 它的本质是参数化类型,也就是说操作的数据类型被指定为一个参数。 也就是将类型有原来的具体类型参数化,然后在…

【CVE复现计划】CVE-2023-27179

CVE-2023-27179 简介: GDidees CMS v3.9.1及更低版本被发现存在本地文件泄露漏洞,漏洞通过位于 /_admin/imgdownload.php 的 filename 参数进行利用。 影响版本: GDidees CMS v3.9.1及更低版本 POC: /_admin/imgdownload.php?filename/fla…

2024蓝桥杯每日一题(树形DP)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:病毒溯源 试题二:没有上司的舞会 试题三:生命之树 试题一:病毒溯源 【题目描述】 病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株,而…

MATLAB 自定义中值滤波(54)

MATLAB 自定义中值滤波(54) 一、算法介绍二、算法实现1.原理2.代码一、算法介绍 中值滤波,是一种常见的点云平滑算法,改善原始点云的数据质量问题,MATLAB自带的工具似乎不太友好,这里提供自定义实现的点云中值滤波算法,具体效果如下所示: 中值滤波前: 中值滤波后:…

前端性能优化-Table渲染速度优化

教务系统-排课页面性能优化总结 一、前言 在公司教务系统中,排课页面慢的令人发指,在某些情况由于数据量大导致页面主进程卡死,遂组织进行一次排查优化,现记录一下 二、效果对比 以下数据均为UAT环境 Performence对比 更改前: 主进程渲染时间为 8s 教务系统-排课页面性…

Ubuntu安装elasticsearch

Ubuntu系统上安装Elasticsearch可以通过多种方式进行,以下是几种常用的安装方法。在开始安装前,请确保你的系统是最新的,这可以通过运行sudo apt update和sudo apt upgrade命令来完成。 方法一:使用APT仓库安装(推荐&…

【日常积累】指定ruby版本环境安装

背景说明 在redis的5.0版本之前,使用redis提供的redis-trib创建redis集群时还需要依赖ruby环境。当然有时候我们自已也需要安装指定ruby版本环境。下面是安装时的大致过程,以及过程中遇到的问题解决。我使用的环境是centos7,小版本差别应该不…

std::exit功能介绍和析构函数调用

std::exit函数调用后,系统会终止当前执行的程序(无论主线程还是子线程调用,该程序都会被终止),在终止之前会有一些清理步骤会被执行: 静态存储对象(静态的或者全局的)会被析构&#…