SpringBoot Bean管理(扫描、注册、注册条件)

news2024/12/23 3:38:31

Bean扫描

一般的扫描包路径 需要使用xml标签或者是@ComponentScan(basePackages = “xxx.xxx”) ,但是在SpringBoot中不需要。

在springBoot 项目的启动类中有一个注解:@SpringBootApplication,这个注解包含以下注解:
在这里插入图片描述
但是ComponentScan并没有指明包路径,它能够扫描到service和controller层是因为:如果不指定扫描包的路径,那他默认去扫描添加了该注解的类所在的包及其子包。

比如:以下是一个项目的结构
在这里插入图片描述

SpringBootApplication(其中包含ComponentScan注解)是添加在com.dome.study包下面的,那么扫描到的包应该是com.dome.study下面的包及其子包(如com.dome.study.service.impl)

Bean注册

如果要注册的Bean来自第三方(不是自己自定义的),是无法用@Component 及衍生注解声明Bean的

但springBoot提供以下注解解决了以上问题:
@Bean
@Import

@Bean
可以在启动类里面去声明一个方法 并使用@Bean,这个方法只创建一个对象就可以了。
例如:

启动类里面的run方法会把一个初始化的一个容器返回来,需要用一个ApplicationContext 对象去接受这个容器,然后调用getBean方法 就可以使用这个对象了。
SpringApplication.run(DemoApplication.class, args);

在这里插入图片描述

但是不建议在启动类里面去进行Bean注册。建议在配置类里面集中去注册

@Configuration  //如果想让该类变成注册类,需要加上这个注解。
public String CommonConfig(){
}

在注入第三方的时候 对象默认的名字是方法名
在这里插入图片描述
在这里插入图片描述
要修改对象的名字可以用@Bean(“aaa”)的方式,此时getBean的入参为“aa”(getBean(“aaa”))

依赖:
如果注入的bean对象需要依赖于(使用到)ioc容器中已经存在的bean对象,需要在方法中声明即可,Spring会自动的注入:
在这里插入图片描述

@Import
书写格式:
1.@Import(Xxx.class) 其中Xxx可以是任何类。
2.如果需要注入很多类,可以采用数组的方式书写。@import({Xxx.class},{Xxx.class},{Xxx.class},{Xxx.class})
但是如果使用数组的方式,代码就会显得特别臃肿,这个时候需要用另外一种方法,需要导入@ImportSelector接口实现类

  1. 首先需要先定义一个类去实现这个接口,然后重写selectImports方法,只需要返回一个字符串数组.
    在这里插入图片描述
    spring boot 会自动调用selectImports方法。
    完成上述过程之后 在使用@Import,
    在这里插入图片描述

Bean 注册条件

当@Value注解没有找到路径的时候 ,代码可能会这报错,于是SpringBoot提供了设置注册生效条件的注解@Conditional
该注解有用起来较为麻烦 于是衍生出来各种注解,其中有三种注解较为常见:
在这里插入图片描述

@ConditionalOnClass主要是判断是否存在这个类文件,如果有这个文件就相当于满足条件,然后可以注入到容器当中。
@ConditionalOnProperty注解可以通过配置文件中的属性值,来判定configuration是否被注入
@ConditionalOnMissingBean它是修饰bean的一个注解,主要实现的是,当你的bean被注册之后,如果而注册相同类型的bean,就不会成功,它会保证你的bean只有一个,即你的实例只有一个。

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

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

相关文章

consul ui访问安全加固

本文侧重介绍访问ui安全加固部分。 安装配置以及集群搭建请参考官方文档 下载安装 官方下载地址&安装教程 Install | Consul | HashiCorp Developer 修改配置,开启acl 首先自行规划好 server和client机器。 按照下述流程在server 生成 bootstrap token。 修改ac…

【大语言模型LLM】-基础语言模型和指令微调的语言模型

🔥博客主页:西瓜WiFi 🎥系列专栏:《大语言模型》 很多非常有趣的模型,值得收藏,满足大家的收集癖! 如果觉得有用,请三连👍⭐❤️,谢谢! 长期不…

openEuler 22.03 LTS SP3(华为欧拉)一键安装 Oracle 11GR2 RAC(231017)

前言 Oracle 一键安装脚本,演示 openEuler 22.03 LTS SP3 一键安装 Oracle 11GR2 RAC(231017)过程(全程无需人工干预):(脚本包括 ORALCE PSU/OJVM 等补丁自动安装) ⭐️ 脚本下载地…

【学习记录】autoware标定相机与激光雷达外参

一、autoware选择 这里踩了好几个坑,首先autoware作为一个无人驾驶知名框架,其内部实际上是有两套标定的东西的,这一点绝大多数博客没有提到。其中最常用的是一个叫标定工具箱的东西,这个ros包已经在1.10往后的版本中被删掉了&am…

独立搭建UI自动化测试框架分享

今天给大家分享一个seleniumtestngmavenant的UI自动化,可以用于功能测试,也可按复杂的业务流程编写测试用例,今天此篇文章不过多讲解如何实现CI/CD,只讲解自己能独立搭建UI框架,如果有其他好的框架也可以联系我&#x…

springboot基于点餐码 二维码在线点餐系统vue.js+java

Maven: 项目管理和构建自动化工具,用于java项目。 java: 广泛使用的编程语言,适用于构建跨平台应用。 Springmvc:从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架。 MyBatis: java持久层框架,支持定制化SQL、存…

网络中其他协议

目录 DNS协议 域名简介 ICMP协议 ICMP功能 ICMP协议格式 ping命令 NAT技术 NATP NAT技术的限制 代理服务器 DNS协议 DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。 为什么有这个协…

随机森林原理及应用

目录 一、随机森林原理、优点、应用场景 1.1基本原理 1.2主要优点 1.3使用场景 二、具体实例 一、随机森林原理、优点、应用场景 随机森林是一种流行且强大的机器学习算法,属于集成学习方法的一部分,主要用于分类和回归任务。它通过组合多个决策树…

Java文件流练习

1 扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件 import java.io.File; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanne…

工业相机和镜头参数和选型

工业相机和镜头参数和选型 文章目录 工业相机和镜头参数和选型前言一、相机参数解释和选型1.相机参数1.1快门-shutter1.2曝光-exposure1.3增益-gain1.4 感光芯片类型(CCD/CMOS)1.5 感光芯片(靶面)尺寸1.6 分辨率1.7 像元尺寸1.8 帧…

海康NVR接入视频监控平台部分视频浏览失败,显示503错误的解决办法

目录 一、问题概述 二、问题排查 (一)排查思路介绍 (二)平台排查 1、确定排查的思路 2、信令控制模块的排查 3、媒体转发模块的排查 (三)客户设备排查 1.观察正常视频的设置 2. 调查问题原因 三…

crossover和wine哪个好 wine和crossover有什么本质区别 苹果电脑运行Windows crossover24

CrossOver是Wine的延伸产品,CrossOver可以简单的理解为类虚拟机,那么wine是什么,许多小伙伴就可能有些一知半解。CrossOver和wine哪个好,wine和CrossOver有什么本质区别呢?下文将围绕着这两个问题展开。 一、CrossOve…

【C++】---STL之list详解

【C】---STL之list详解 一、了解list的基本信息二、成员函数1、构造2、迭代器3、empty()4、size()5、front()6、back()7、push_front()8、pop_front()9、push_back()10、pop_back()11、insert()12、erase()13、swap()14、sort()15、reverse() 一、了解list的基本信息 1、库里面…

各平台奇怪问题备忘录

微信小程序 小程序报错Page 页面路径 has not been register yet 描述:uniapp做微信小程序开发时,新增某页面后,小程序跳转该页面报错Page 页面路径 has not been register yet 已知:page.json已添加该页面,小程序a…

如何优雅地Spring事务编程

本文已收录至Github,推荐阅读 👉 Java随想录 微信公众号:Java随想录 在开发中,有时候我们需要对 Spring 事务的生命周期进行监控,比如在事务提交、回滚或挂起时触发特定的逻辑处理。那么如何实现这种定制化操作呢&am…

[Meachines][Medium]IClean

Main $ nmap -p- -sC -sV 10.10.11.12 -Pn --min-rate 1000 $ echo "10.10.11.12 capiclean.htb">>/etc/hosts 这题可能和python的SSTI有关 $ gobuster dir --url "http://capiclean.htb" --wordlist /usr/share/seclists/Discovery/Web-Content/c…

ENVI操作:GF2影像全色与多光谱融合

1、插件下载安装 1.1、插件下载 ENVI 处理 GF2影像需利用特定的 App 插件进行处理;进入下述官方网站,点击 下载 即可;仅支持 ENVI 5.3.1 以上版本的软件; 下载地址:https://envi.geoscene.cn/appstore/ 1.2、属性设…

VS2022配置和搭建QT

一、下载QT 可以去QT官网下载:https://www.qt.io/product/development-tools。 直接安装。 二、安装qt插件 直接在vs插件市场搜索就行。 安装的时候根据提示,关闭vs自动安装 再次进去vs提示你选择qt版本,psth里边找到安装版本的qmake.exe就行 配…

11.盛最多水的容器 C++

一开始我最先想到的是暴力解法,就是两个循环嵌套依次遍历,所有情况都过一遍找出最大值,这样示例的结果虽然是正确的,但是超时。所以暴力解法行不通,双指针思考才是正道,双指针一般都是一边一个,…

裸金属服务器是什么

自推出裸金属服务器以来,它一直断断续续地出现在我们面前。最近,关于裸金属服务器、什么是裸金属服务器、裸金属服务器可以做什么、数据托架共享的讨论越来越多: 裸金属服务器(bare metal server,BMS)的官…