SpringBoot2:IOC容器的相关操作以及常用注解说明

news2024/11/16 1:25:15

一、查看容器中的Bean实例

查看springboot中的容器实例,首先,我们要获取到IOC容器。

        //1、返回我们的IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

        //2、查看容器里面的组件
        String[] names = run.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }

这个获取实例的具体实现类是:org.springframework.beans.factory.support.DefaultListableBeanFactory
其内部,有很多关于容器实例的获取方式
在这里插入图片描述

二、向容器中注册Bean实例

我们知道,在springmvc中,向IOC容器中注册实例的方式有两种
1、xml配置文件里面通过bean标签实现向容器中注册Bean实例。
2、通过扫描注解标注的类,来实现向容器中注册Bean实例。

springboot中,已经不建议使用xml配置文件,那么,该如何向IOC容器中注册组件了?

1、扫描注解方式

启动类加上扫描路径

@SpringBootApplication(scanBasePackages = "com.atguigu.boot")
或者
@ComponentScan("com.atguigu.boot")

那么,在这个包路径下,加上springboot定义的注解类,都会注册到容器中
如:@Bean、@Component、@Controller、@Service、@Repository

这种方式,在springmvc中,对应的配置如下

	<!-- 开启注解 -->
    <context:annotation-config></context:annotation-config>
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
    
	<!-- 扫描文件 -->
	<mvc:annotation-driven/>
	<context:component-scan base-package="com.kfc" >
		<!--扫描serveice等注解的类-->
         <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
         <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
         <context:include-filter type="annotation" expression="org.springframework.stereotype.Component" />
        <!--排除Controller,Controller由springmvc加载-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	</context:component-scan>

2、@Configuration配置类方式

这个注解标注的类,就相当于以前的xml配置文件。

  • 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的,实例名默认是方法名
    在这里插入图片描述
  • 2、配置类本身也是组件
    即上图中的MyConfig类,也是IOC容器中的组件
  • 3、proxyBeanMethods:是否代理bean的方法
    • @Configuration(proxyBeanMethods = false),建议默认配置true即可。
    • Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
    • Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
    • 组件依赖必须使用Full模式。其他默认选择Lite模式

3、@Conditional条件装配方式

在这里插入图片描述
这个注解,有很多子注解。
当条件满足什么情况时,就向容器中注册组件。
比如:当容器中没有A实例的时候,就向容器中注册一个A实例。这样,可以节省JVM内存空间。

注意:这个注解配合@Configuration标注的配置类上使用。
如:@ConditionalOnMissingBean(name = "tom")IOC中没有tom实例,就注册一个该实例。

4、@ImportResource和@Import方式

@ImportResource,可以将眼前的xml配置中配置的bean,注册到IOC中。方便对以前的springmvc升级。
@ImportResource("classpath:beans.xml"),其中beans.xmlresources目录下。


@Import,用于将第三方jar包中的类,注册到IOC容器中。
用法:
@Import({User.class, DBHelper.class}),这里的DBHelperch.qos.logback.core.db.DBHelper

三、删除容器中的Bean实例

Spring Boot中,你不能直接从IOC容器中删除一个实例,因为IOC容器管理的是实例的生命周期,包括创建和销毁。一旦容器启动,它会保持对所有管理的bean的引用,以便于调用。

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

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

相关文章

线性代数基础(2)——特征值和特征向量

第一节博客已经整理了求导的公式&#xff0c;一些常用的概念。链接如下&#xff1a;高等数学基础&#xff08;1&#xff09;-CSDN博客。 第二节博客整理了微积分的公式及其相关概念。链接如下&#xff1a;高等数学基础&#xff08;2&#xff09;——微积分-CSDN博客 第三节博客…

JavaWeb JavaScript ⑩ 日程管理 第一期

自我消耗&#xff0c;敏感是我&#xff0c; 明媚是我&#xff0c; 我横跳在不同的情绪中 —— 24.8.31 一、登录页及校验 1.校验账号格式 // 校验账号格式function checkUsername(){// 定义正则表达式表示字符串规则var usernameReg /^[a-zA-Z0-9]{5,10}$/;// 获取用户名输入…

96.WEB渗透测试-信息收集-Google语法(10)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;95.WEB渗透测试-信息收集-Google语法&#xff08;9&#xff09; • site &#xff1a; x…

【硬件操作入门】3--同步与异步、半双工传输、UART硬件介绍、bps速率计算

【硬件操作入门】3–同步与异步、半双工传输、UART硬件介绍、bps速率计算 文章目录 【硬件操作入门】3--同步与异步、半双工传输、UART硬件介绍、bps速率计算一、同步与异步1.1. 概念1.2 同步信号1.3 异步信号1.4 举个例子&#xff1a;红外遥控器解码器&#xff08;异步&#x…

一分钟学会系列-1电烙铁(焊台)

目录&#xff1a; ‌1、概述 2、电烙铁的种类 3、焊接步骤 4、电烙铁的保养 ‌1、概述 电烙铁‌是一种电子制作和电器维修中常用的工具&#xff0c;主要用于焊接元件及导线。使用电烙铁时&#xff0c;需要注意安全&#xff0c;并采取适当的预防措施&#xff0c;如使用风扇…

最新ssl证书在线申请源码+网站ICP备案查询源码

最新ssl证书在线申请源码网站ICP备案查询源码 经过精心调试和修复&#xff0c;我们对源码进行了优化&#xff0c;确保了证书价格的准确显示。现在&#xff0c;您可以放心使用我们的在线生成网站源码&#xff0c;完整地展示证书价格&#xff0c;并在生成证书时提供准确的价格计…

SQL-函数

1、字符串函数 # 字符函数 select concat(hello , mysql!); select lower(HELLO); select upper(hello); select lpad(01,5,-);# 左填充 select rpad(01,5,-);# 右填充 select trim( hello mysql ! );# 去除前后空格 select substring(hello mysql!,1,7);# 截取一部分字符前7…

【教学类-35-21】20240901 中2班描字帖(学号+姓名、虚拟姓名、杨任东竹石体 Regular)

背景需求&#xff1a; 8月底通知我成为中2班的班主任&#xff0c;为了快速识别幼儿的脸、姓名、学号&#xff0c;再次制作描字帖&#xff0c;并拍照。 最近做的一份字帖是中4班描字帖 【教学类-35-20】20240328 中4班描字帖&#xff08;学号姓名 A4竖版2份 横面&#xff09;…

--- 数据结构 链表 --- java

与顺序表相比&#xff0c;链表的最大优点就是不会存在空间的浪费 链表是通过将一个一个储存数据的节点&#xff08;对象&#xff09;连起来&#xff08;通过记录下他们的地址&#xff09;&#xff0c;这些数据在逻辑上就是线性的&#xff0c;但在物理上不是&#xff0c;因为地…

[Leetcode 216][Medium]组合总和 III--回溯(组合问题)

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 对于组合问题&#xff0c;首先要想到回溯法。那么可以根据回溯法模版进行设计。 void backtrace(元素){if(满足题目要求的条件){保存目前路径/状态/结果;return;}for循环,往目前状态相邻的所…

9-8 束搜索

贪心搜索 穷举搜索 束搜索 小结 序列搜索策略包括贪心搜索、穷举搜索和束搜索。 贪心搜索所选取序列的计算量最小&#xff0c;但精度相对较低。 穷举搜索所选取序列的精度最高&#xff0c;但计算量最大。 束搜索通过灵活选择束宽&#xff0c;在正确率和计算代价之间进行权衡…

栈和队列——用队列实现栈

题目中给出&#xff0c;让我们应用两个队列实现栈&#xff0c;首先我们先来想一下&#xff0c;栈是先进后出&#xff0c;队列是先进先出。所以我们就需要应用两个队列来回导才能实现栈的特点。因为这道题是基于队列来实现的&#xff0c;所以在下方若有看不懂的函数名称可以去栈…

Java 入门指南:Java 并发编程 —— Synchronized 实现悲观锁(Pessimistic Locking)

悲观锁 悲观锁&#xff08;Pessimistic Locking&#xff09;是一种悲观的并发控制机制&#xff0c;它基于悲观的假设&#xff0c;即并发冲突会时常发生&#xff0c;因此在访问共享资源&#xff08;如数据库记录或共享变量&#xff09;之前&#xff0c;会先获取独占性的锁&…

数组结构第一周做题总结_基础练习

错误的原因是写了无参构造函数但是没有实现 id:8 A. 月份查询&#xff08;指针数组&#xff09; 题目描述 已知每个月份的英文单词如下&#xff0c;要求创建一个指针数组&#xff0c;数组中的每个指针指向一个月份的英文字符串&#xff0c;要求根据输入的月份数字输出相应的…

盘点java8 stream中隐藏的函数式接口

shigen坚持更新文章的博客写手&#xff0c;记录成长&#xff0c;分享认知&#xff0c;留住感动。个人IP&#xff1a;shigen 提到函数式接口&#xff0c;最常见的就是lambda表达式&#xff0c;IDEA也有智能的提示&#xff1a; 最后改成这样的就是最简洁的、IDEA希望的风格&#…

机器学习:基于机器学习的中文评论情感分析

通过机器学习技术对中文评论进行情感分析。我们使用了jieba进行中文分词&#xff0c;移除了停用词&#xff0c;并利用词袋模型&#xff08;Bag of Words&#xff09;和多项式朴素贝叶斯分类器对评论进行了情感分类。实验结果表明&#xff0c;该模型在测试集上达到了较高的准确率…

如何构建高效的中药材进存销管理系统?——运用Java SpringBoot和Vue实现库存实时监控,简化销售流程,提升药材管理效率。

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

前端宝典二十一:前端异步编程规范手写Promise、async、await

本文主要探讨前端异步编程的处理方式、处理场景&#xff0c;并且手写Promise的全家桶&#xff0c;介绍async、await方法使用 一、异步处理方式有&#xff1a; 1. 回调函数 function fetchDate(callback) {setTimeout(() > {const date new Date();callback(date);}, 100…

SpringSecurity Oauth2 - 密码模式完成身份认证获取令牌 [自定义UserDetailsService]

文章目录 1. 授权服务器2. 授权类型1. Password (密码模式)2. Refresh Token&#xff08;刷新令牌&#xff09;3. Client Credentials&#xff08;客户端凭证模式&#xff09; 3. AuthorizationServerConfigurerAdapter4. 自定义 TokenStore 管理令牌1. TokenStore 的作用2. Cu…

嵌入式Linux C应用编程指南-高级I/O(速记版)

第十三章 高级I/O 13.1 非阻塞I/O 阻塞其实就是进入了休眠状态&#xff0c;交出了 CPU 控制权。比如 wait()、pause()、sleep()等函数都会进入阻塞。 阻塞式 I/O 顾名思义就是对文件的 I/O 操作&#xff08;读写操作&#xff09;是阻塞式的&#xff0c;非阻塞式 I/O 同理就是对…