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

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

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

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

相关文章

粘接黑科技标杆专业展会-ASE CHINA 2024 震撼开幕!

2024年9月19日&#xff0c;第27届国际胶粘剂及密封剂展暨第19届国际胶粘带与薄膜展&#xff08;以下简称ASE CHINA 2024&#xff09;在上海新国际博览中心N3-N4-N5馆璀璨揭幕。ASE CHINA作为粘接新材料产业风向标&#xff0c;历经27年的辛苦耕耘&#xff0c;与业界同仁并肩而行…

sql执行流程经典案例分析

现在有联合索引(a,b),select* form tb where b xx group by a执行流程是什么样子的? CREATE TABLE IF NOT EXISTS test(id INT(10) NOT NULL AUTO_INCREMENT COMMENT主键,a INT(10) NULL,b INT(10) NULL,PRIMARY KEY(id),INDEX idx_a_b(a,b))ENGINE INNODB;INSERT INTO test…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下部署Grav内容管理系统

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统下部署Grav内容管理系统 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Grav介绍2.1 CMS介绍2.2 Grav简介2.3 Grav特点2.4 …

Abaqus 2024百度云下载:附中文安装包+教程

正如大家所熟知的&#xff0c;Abaqus是一款有限元分析软件&#xff0c;能够高效的配合工程师完成创作。它可以高精度地实现包括金属、橡胶、高分子材料、复合材料、钢筋混凝土、可压缩超弹性泡沫材料以及土壤和岩石等地质材料的工程仿真计算。 “Abaqus”不仅具有出色的仿真计…

ODrive电机驱动算法VScode环境配置笔记教程

1、ODrive基本介绍 ODrive 是一个开源的优秀电机控制器项目&#xff0c;旨在为各种应用提供高性能、高可靠性的电机控制解决方案。这个项目是专门用于驱动无刷直流电机&#xff08;BLDC&#xff09;和永磁同步电机&#xff08;PMSM&#xff09;的高性能开源伺服控制系统。ODriv…

15_Python中错误和异常处理

在Python编程中&#xff0c;错误&#xff08;Error&#xff09;和异常&#xff08;Exception&#xff09;是两个相关的概念&#xff0c;但它们之间有细微的区别。 错误&#xff08;Error&#xff09; 错误通常是指在执行代码时遇到的问题&#xff0c;这些问题可能会导致程序崩…

python使用vscode 所需插件

1、导读 环境&#xff1a;Windows 11、python 3.12.3、Django 4.2.11、 APScheduler 3.10.4 背景&#xff1a;换系统需要重新安装&#xff0c;避免后期忘记&#xff0c;此处记录一下啊 事件&#xff1a;20240921 说明&#xff1a;记录&#xff0c;方便后期自己查找 2、插件…

vmware官网下载

1 https://www.vmware.com/ 2 3 4 https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion

想要让ai做ppt?试试这四个!

今天咱们来聊点新鲜的&#xff0c;就是那些能让我们从繁琐的PPT制作中解脱出来的智能工具。你是否还在为制作PPT熬夜到天亮&#xff1f;别担心&#xff0c;我这就带你看看目前市面上最火的几款智能PPT生成工具&#xff0c;它们的表现如何呢&#xff1f;让我们一探究竟&#xff…

2021的OWASP TOP 10

OWASP&#xff08;开放Web应用安全项目&#xff09;是一个非营利性组织&#xff0c;旨在提高软件安全性。 每四年一个更新&#xff0c;2025年就会再次更新&#xff0c;到时候这篇文章也会实时更新。 我主要从定义&#xff0c;场景&#xff0c;原因&#xff0c;影响&#xff0…

简单水印通过python去除

简单水印通过python去除 先看效果&#xff0c;如果效果不是你需要的就可以不用浪费时间。 注意&#xff1a;这种主要还是对应的文字在水印上方的情况&#xff0c;同时最好不要有渐变水印否则可能最后输出的图片的水印还会有所残留&#xff0c;不过还是学习使用&#xff0c;相信…

VisionPro - 基础 - 00 模板匹配技术和在VP中的使用 - PMAlign - PatMax - (4)- 控制模板的匹配

前言&#xff1a; 针对PatMax 的高级应用和原理&#xff0c;在这一节继续进行说明&#xff1a;这一节主要考虑的是PatMax模板匹配的原理&#xff1a;如何控制模板的匹配。 本节先介绍了几个模板匹配的衡量标准&#xff0c;比如模板匹配分数&#xff0c;和模板的几种模板匹配的…

二维光场分析

一、单色光波长的复振幅表示 实波函数 复波函数 复振幅 由于时间因子相同,可以用复振幅来描述 光强 1.1 球面波的复振幅(单色点光源发出的光波) 等相位面是同心球面,波矢处处与等相位面垂直,即 是 r = 1 处的振幅 发散球面波: 会聚球面波: <

SOMEIP_ETS_121: SD_Initial_Events_after_SubscribeEventgroup

测试目的&#xff1a; 验证DUT在接收到Tester的SubscribeEventgroup消息后&#xff0c;能够发送SubscribeEventgroupAck确认消息&#xff0c;并立即发送对应的初始化字段给订阅的事件组。 描述 本测试用例旨在确保DUT能够正确响应SubscribeEventgroup消息&#xff0c;通过发…

arthas -- xxljob本地调试

方案一&#xff1a;测试类 package cn.wanda.wic.content.job.xxljob;import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;SpringBootTest public class ShopResourceMigrationJobTest {Reso…

探索人工智能绘制宇宙地图的实现

人工智能 (AI) 已成为了解世界的重要工具。现在&#xff0c;随着人们对太空探索的兴趣重新升温&#xff0c;人工智能也可能对其他世界产生同样的影响。 尽管经过了几十年的研究&#xff0c;科学家们对地球大气层以外的宇宙仍然知之甚少。绘制行星、恒星、星系及其在太空中的运…

CCRC-CDO首席数据官:未成年人首次上网年龄持续降低

近日&#xff0c;中国社会科学院新闻与传播研究所联合社会科学文献出版社发布了《青少年蓝皮书&#xff1a;中国未成年人互联网运用报告(2024)》&#xff0c;该报告对中国未成年人的互联网使用情况进行了全面的研究和专项汇报。 调查数据透露&#xff0c;未成年人接触网络的年…

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(上)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量和小型系统三方库移植指南…

[python]从零开始的PySide安装配置教程

一、PySide是什么&#xff1f; PySide 是 Qt for Python 项目的一部分&#xff0c;它提供了与 PyQt 类似的功能&#xff0c;使开发者能够使用 Python 编程语言来构建基于 Qt 的图形用户界面 (GUI) 应用程序。PySide 是由 Qt 公司官方维护的&#xff0c;而 PyQt 则是由第三方开发…

化学分子结构检测系统源码分享

化学分子结构检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…