当前位置: 首页 > news >正文

1.Spring-容器-注册

一、@Bean和获取Bean

(1)创建IoC容器:

SpringApplication.run(类名.class, args);
ConfigurableApplicationContext ioc = SpringApplication.run(Spring01IocApplication.class, args);

 

(2)将对象注册到IoC容器中:

@Bean

(3)获取到IoC容器中的组件对象

1.按照名字获取:需要强转

Person zhangsan = (Person) ioc.getBean("zhangsan");

2.按照类型获取 :同一个类型只有唯一一个

Person bean = ioc.getBean(Person.class);

3.按照类型获取 :同一个类型有多个

Map<String, Person> type = ioc.getBeansOfType(Person.class);

4.按照类型和名字获取 

Person bean = ioc.getBean("zhangsan", Person.class);

 

@SpringBootApplication
public class Spring01IocApplication {/*** 组件的创建时机:容器启动过程中就会创建组件对象(构造方法在容器创建完成前)* 单实例特性:所有组件默认是单例的,每次获取直接从容器中拿。容器提前会创建组件*/public static void main(String[] args) {// 一.启动Spring应用上下文:ApplicationContext  IOC容器ConfigurableApplicationContext ioc = SpringApplication.run(Spring01IocApplication.class, args);System.out.println("-------------------------------------------------------------------------IOC容器创建完成:----------------------------------------------------------------");// 二.获取到容器中的组件:Dog bean = ioc.getBean(Dog.class);System.out.println("Dog=:" + bean);Dog bean1 = ioc.getBean(Dog.class);System.out.println("Dog=:" + bean1);Dog bean2 = ioc.getBean(Dog.class);System.out.println("Dog=:" + bean2);}public static void test01BeanAnnotation(String[] args) {// 一.启动Spring应用上下文:ApplicationContext  IOC容器ConfigurableApplicationContext ioc = SpringApplication.run(Spring01IocApplication.class, args);System.out.println("IOC容器对象:" + ioc);// 二.获取到容器中所有组件的名字:容器中装了哪些组件:
//        String[] beanDefinitionNames = ioc.getBeanDefinitionNames();
//        for (String beanDefinitionName : beanDefinitionNames) {
//            System.out.println(beanDefinitionName);
//        }// 四.获取容器中的组件对象: → 从容器中“彻底”(而非只获取组件名)获取Bean	→ 前提:组件已经放入容器中//组件的四大特性:(名字、类型)、对象、作用域/* 名字:默认是方法名,即zhangsan,也可以自定义名字:@Bean("zhangsan111")组件名全局唯一,若组件名重复,则一定会给容器中放最先声明的那个(按照顺序排前面的那个)。*///4.1按照组件名获取对象 getBean(String name),       但需要强转,解决:4,4按照类型+名字获取组件对象/*从容器中获取组件对象:①若组件不存在,则抛出异常NoSuchBeanDefinitionException②若组件不唯一,按照类型只要一个时,则抛出异常NoUniqueBeanDefinitionException按照名字只要一个时,精确获取到指定对象。③若组件不唯一,要一堆时,返回所有组件的List集合,可以正常运行。            →          4.3按照组件类型获取这种类型的所有组件对象 getBeanOfType(Map<String, T> typeToAutowireCandidates)*///Object zhangsan = ioc.getBean("zhangsan");//此处已知类型为Person,故可以直接强转Person zhangsan = (Person) ioc.getBean("zhangsan");System.out.println("从容器中获取到的组件对象:" + zhangsan);//4.2按照组件类型获取对象 getBean(Class<T> requiredType),若组件不存在,则抛出异常NoSuchBeanDefinitionException
//        Person bean = ioc.getBean(Person.class);
//        System.out.println("从容器中获取到的组件对象:" + bean);//4.3按照组件类型获取这种类型的所有组件对象 getBeanOfType(Map<String,T>Map<String, Person> type = ioc.getBeansOfType(Person.class);System.out.println("从容器中获取到的组件对象:" + type);//4.4按照类型和名字获取组件对象、Person bean = ioc.getBean("zhangsan", Person.class);System.out.println("从容器中获取到的组件对象:" + bean);}// 三.给容器中注册一个自己的组件;容器中每个组件都有自己的名字,方法名就是组件的名字 → 给容器中放了一个组件@Bean//获取组件名@Bean(name = "zhangsan")public Person zhangsan() {Person person = new Person();person.setName("张三");person.setAge(18);person.setGender("男");return person;}@Bean(name = "lisi")public Person lisi() {Person person = new Person();person.setName("李四");person.setAge(18);person.setGender("男");return person;}@Beanpublic Dog dog() {return new Dog();}}

(4)注意

①组件的创建时机:容器启动过程中就会创建组件对象(构造方法在容器创建完成前)

②单实例特性:所有组件默认是单例的,每次获取直接从容器中拿。容器提前会创建组件 

二、@Configuration:管理组件:使用配置类

将注册进容器中的组件分类管理:使用配置类 分类管理 组件

使用@Configuration告诉Spring容器,这是一个配置类。

配置类也是组件,他是组件中的一种。

 

 

三、MVC分层注解

 首先,分层注解是给人看的,对于Spring来说,实际上标啥注解都是@Component。

但是,需遵守开发规范,即

@ComponentScan 

且分层注解所在能起作用的前提是这些组件必须在主程序所在的包及其子包结构下。假设没在时,可以这样解决,

 

四、@Import:第三方组件想要导入容器中,是没办法快速标注分层注解的。

解决方法1:

        @Bean,自己new,注册给容器 

解决方法2: 

        @Import

 五、若主类上注解太多,则新建一个配置类,专用于放置注解

相关文章:

1.Spring-容器-注册

一、Bean和获取Bean &#xff08;1&#xff09;创建IoC容器&#xff1a; SpringApplication.run(类名.class, args); ConfigurableApplicationContext ioc SpringApplication.run(Spring01IocApplication.class, args); &#xff08;2&#xff09;将对象注册到IoC容器中&am…...

Mapper.xml SQL大于小于号转义符

Mapper.xml中写的SQL语句&#xff0c;大于小于号字符直接写会报错&#xff0c;需要变成转义字符 对应如下&#xff1a; Mapper.xml SQL大于小于号转义符...

Linux:进程(三)——进程状态

目录 Linux源代码对进程的描述 R S D T t X Z&#xff08;进程僵尸&#xff09; 孤儿进程 Linux源代码对进程的描述 理论上把进程状态大致被分为了&#xff1a;运行、阻塞、挂起。那么&#xff0c;在操作系统中具体是如何描述状态的。&#xff08;有时候Linux内核也把…...

Effective Java 学习笔记 如何为方法编写文档

目录 方法的文档注解设计的原则 Javadoc常用的文档注释 一些注意细节 通过Javadoc命令生成h5页面 这是第8章Java方法的最后一部分&#xff0c;聚焦为导出的API编写文档注释。 如果要想使得API真正可用&#xff0c;配套的文档是必须的。Java提供了Javadoc这个文档生成工具&…...

TCP四大拥塞控制算法总结

四大算法&#xff1a;1.慢启动&#xff0c;2.拥塞避免&#xff0c;3.拥塞发生&#xff0c;4.快速恢复。 慢启动&#xff1a; 首先连接建好的开始先初始化拥塞窗口cwnd大小为1&#xff0c;表明可以传一个MSS大小的数据。 每当收到一个ACK&#xff0c;cwnd大小加一&#xff0c…...

深入解析ElasticSearch从基础概念到性能优化指南

一.引言 ElasticSearch是一个分布式的搜索和分析引擎&#xff0c;专为处理大规模的结构化和非结构化数据而设计。它建立在Apache Lucene之上&#xff0c;提供了强大的全文搜索能力、高可用性和实时分析的功能。无论是作为日志分析平台&#xff0c;还是作为数据驱动的应用程序的…...

git分支合并时忽略指定文件

分支合并忽略特定文件步骤 1.在项目根目录下cmd窗口运行以下命令 git config merge.ours.driver true2.在项目根目录下新建文件.gitattributes然后文件中写入需要忽略的文件名 mergeours, 一个文件占一行 Dockerfile mergeours /nginx/default.conf mergeours...

基于微信小程序的童装商城的设计与实现+ssm(lw+演示+源码+运行)

童装商城小程序 摘 要 随着移动应用技术的发展&#xff0c;越来越多的用户借助于移动手机、电脑完成生活中的事务&#xff0c;许多的传统行业也更加重视与互联网的结合&#xff0c;由于城镇人口的增加&#xff0c;人们去商场购物总是排着长长的队伍&#xff0c;对于时间紧的人…...

什么叫后验分布

后验分布&#xff08;Posterior Distribution&#xff09;是在贝叶斯统计中一个重要的概念。它指的是在观测到数据之后&#xff0c;对参数或潜变量的分布的更新。具体来说&#xff0c;后验分布是基于先验分布&#xff08;Prior Distribution&#xff09;和似然函数&#xff08;…...

Godot游戏如何提升触感体验

在游戏世界中&#xff0c;触感体验至关重要&#xff0c;既能极大提升玩家沉浸感&#xff0c;让其深度融入游戏&#xff0c;在操作角色或与环境互动时&#xff0c;通过触感反馈获得身临其境的真实感&#xff08;比如动作游戏中角色攻击或受击时的振动反馈&#xff0c;能使玩家更…...

数字图像面积计算一般方法及MATLAB实现

一、引言 在数字图像处理中&#xff0c;经常需要获取感兴趣区域的面积属性&#xff0c;下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…...

【STL】 set 与 multiset:基础、操作与应用

在 C 标准库中&#xff0c;set 和 multiset 是两个非常常见的关联容器&#xff0c;主要用于存储和管理具有一定规则的数据集合。本文将详细讲解如何使用这两个容器&#xff0c;并结合实例代码&#xff0c;分析其操作和特性。 0.基础操作概览 0.1.构造&#xff1a; set<T&…...

xhs 小红书 x-s web 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我…...

胤娲科技:谷歌DeepMind祭出蛋白质设计新AI——癌症治疗迎来曙光

在科技的浩瀚星空中&#xff0c;DeepMind的“阿尔法”家族总是能带来令人瞩目的璀璨光芒。这一次&#xff0c;它们再次以惊人的姿态&#xff0c; 将AI的触角深入到了生命的微观世界——蛋白质设计领域&#xff0c;为我们描绘了一幅未来医疗的宏伟蓝图。 想象一下&#xff0c;一…...

【后端】【nginx】nginx常用命令

文章目录 1. 启动与停止相关命令2. 配置文件检查与验证3. 查看日志4. 查看状态与版本5. 端口与连接相关命令 1. 启动与停止相关命令 # 启动 NGINX sudo nginx# 立即停止 NGINX sudo nginx -s stop# 优雅停止 NGINX sudo nginx -s quit# 优雅重载配置 sudo nginx -s reload# 完…...

MATLAB系列08:输入/输入函数

MATLAB系列08&#xff1a;输入/输入函数 8. 输入/输入函数8.1 函数textread8.2 关于load和save命令的进一步说明8.3 MATLAB文件过程简介8.4 文件的打开和关闭8.4.1 fopen函数8.4.2 fclose函数 8.5 二进制 I/O 函数8.5.1 fwrite 函数8.5.2 fread函数 8.6 格式化 I/O 函数8.6.1 f…...

《财富之眼:用经济思维看清世界》pdf电子书下载

《财富之眼&#xff1a;用经济思维看清世界》pdf电子书下载 内容简介 一切社会现象都是经济现象&#xff0c;我们只能赚到自己认知范围内的 钱。我国社会主要矛盾已经转化为人民日益增长的美好生活需要和不 平衡不充分的发展之间的矛盾&#xff0c;其中“不平衡不充分”很大程…...

QT中文乱码

文章目录 方法一方法二 方法一 fromLocal8Bit() 可以把中文转为Unicode eg:QString str QString::fromLocal8Bit(“中文简体”); 方法二 预处理&#xff0c;根据设置的本地字符集转换&#xff0c;能正确转换含有中文的QString。 #pragma execution_character_set("u…...

如何安装1Panel面板并架设一个静态网站

我们通常要架设网站在vps上&#xff0c;就要用到面板&#xff0c;一般是宝塔&#xff0c;但这个面板收费项目较多&#xff0c;用着不太方便。相比宝塔面板&#xff0c;1panel面板是国内功能强大、操作简单、免费易学的Linux服务器管理面板。我们还可以使用一键代码来安装这个面…...

craco-less使用问题

craco-less使用问题 问题背景 前端是用React搭建&#xff0c;使用craco配置&#xff0c;相关库或插件版本如下 "craco/craco": "^7.1.0","react-scripts": "^5.0.1","craco-less": "^3.0.1"在生产环境&#xff…...

14 vue3之内置组件trastion全系列

前置知识 Vue 提供了 transition 的封装组件&#xff0c;在下列情形中&#xff0c;可以给任何元素和组件添加进入/离开过渡: 条件渲染 (使用 v-if)条件展示 (使用 v-show)动态组件组件根节点 自定义 transition 过度效果&#xff0c;你需要对transition组件的name属性自定义。…...

力扣(leetcode)每日一题 LCR 187 破冰游戏(还是考的约瑟夫环)

题干 社团共有 num 位成员参与破冰游戏&#xff0c;编号为 0 ~ num-1。成员们按照编号顺序围绕圆桌而坐。社长抽取一个数字 target&#xff0c;从 0 号成员起开始计数&#xff0c;排在第 target 位的成员离开圆桌&#xff0c;且成员离开后从下一个成员开始计数。请返回游戏结束…...

nginx模块篇(四)

文章目录 四、Nginx的扩展模块4.1. Lua4.1.1 概念4.1.2 特性4.1.3 应用场景4.1.4 Lua的安装4.1.5 Lua的语法4.1.5.1 第一个Lua程序4.1.5.2 Lua的注释4.1.5.3 标识符4.1.5.4 关键字4.1.5.5 运算符4.1.5.6 全局变量&局部变量4.1.5.7 Lua数据类型nilbooleannumberstringtablef…...

奇安信渗透2面经验分享

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…...

【计算机网络篇】电路交换,报文交换,分组交换

本文主要介绍计算机网络中的电路交换&#xff0c;报文交换&#xff0c;分组交换&#xff0c;文中的内容是我认为的重点内容&#xff0c;并非所有。参考的教材是谢希仁老师编著的《计算机网络》第8版。跟学视频课为河南科技大学郑瑞娟老师所讲计网。 目录 &#x1f3af;一.划分…...

【TypeScript入坑】什么是TypeScript?

TypeScript入坑 什么是 TypeScriptTypeScript 的优势 什么是 TypeScript TypeScript&#xff1a;是 JavaScript 的超集&#xff0c;拥有类型机制&#xff0c;不会再浏览器直接执行&#xff0c;而是编译成 JavaScript 后才会运行。 超集&#xff08;superset&#xff09;&…...

Agile Modbus STM32裸机移植 从机使用

本教程手把手教你实现Agile Modbus,照抄就能成。 并且会解读函数功能含义。 1. 引言 Agile Modbus 是一个轻量级的 Modbus 协议栈,可以满足用户在任何场景下的需求。 功能 支持 rtu 和 tcp 协议,使用纯 C 语言开发,不涉及任何硬件接口,可以直接在任何形式的硬件上使用。由…...

mysql5.7.44安装教程

mysql5.7.44安装教程 1.windows 二进制压缩包从MySQL官网下载即可。 2.解压后&#xff0c;在根目录下创建my.ini文件 [mysql] # 设置 mysql 客户端默认字符集 default-character-setutf8 [mysqld] #设置 3306 端口 port 3306 # 设置 mysql 的安装目录 basedir …...

etsts

Dockerfile FROM apache/flink:1.19-scala_2.12-java8 RUN mkdir -p $FLINK_HOME/usrlib COPY MysqlFlinkCdcToKafka-jar-with-dependencies.jar $FLINK_HOME/usrlib/MysqlFlinkCdcToKafka-jar-with-dependencies.jar 构建镜像的命令 docker buildx build --load --platform l…...

C++_22_异常

文章目录 异常概念&#xff1a;**抛出异常&#xff1a;**关键字&#xff1a; **捕获异常&#xff1a;****栈解旋&#xff1a;****异常的接口声明&#xff1a;****异常对象的生命周期&#xff1a;**1 传递异常对象【不使用】2 传递异常对象指针【不使用】3 传递异常对象引用【**…...