【SpringBoot】了解简单原理 Bean管理 配置优先级

文章目录

  • 一、配置优先级
    • 1.1 命令行设置端口号
    • 1.2 打包后修改端口号
    • 1.3 优先级 小结
  • 二、Bean的管理
    • 2.1 获取Bean
    • 2.2 Bean作用域
    • 2.3 第三方Bean
  • 三、剖析Springboot的底层原理
    • 3.1 起步依赖
    • 3.2 自动配置
      • 3.2.1 第三方类装配
      • 3.2.2 原理分析
  • 总结
    • Web后端开发总结:
    • 源码跟踪技巧:


一、配置优先级

配置文件优先级排名(从高到低):

  1. properties配置文件
  2. yml配置文件
  3. yaml配置文件
    1

1.1 命令行设置端口号

  1. Java系统属性配置 (格式: -Dkey=value)
-Dserver.port=9000
  1. 命令行参数 (格式:–key=value)
--server.port=10010

1

1.2 打包后修改端口号

java -Dserver.port=9000 -jar XXXXX.jar --server.port=10010
java -Dserver.port=9000 -jar XXXXX.jar

1

1.3 优先级 小结

1

二、Bean的管理

2.1 获取Bean

默认情况下,SpringBoot项目在启动的时候会自动的创建IOC容器(也称为Spring容器),并且在启动的过程当中会自动的将bean对象都创建好,存放在IOC容器当中。应用程序在运行时需要依赖什么bean对象,就直接进行依赖注入就可以了。

主动从IOC容器中获取到bean对象,3种常用方式:

  1. 根据name获取bean

    Object getBean(String name)
    
  2. 根据类型获取bean

    <T> T getBean(Class<T> requiredType)
    
  3. 根据name获取bean(带类型转换)

    <T> T getBean(String name, Class<T> requiredType)
    

测试:

@SpringBootTest
class SpringbootWebConfig2ApplicationTests {@Autowiredprivate ApplicationContext applicationContext; //IOC容器对象//获取bean对象@Testpublic void testGetBean(){//根据bean的名称获取DeptController bean1 = (DeptController) applicationContext.getBean("deptController");System.out.println(bean1);//根据bean的类型获取DeptController bean2 = applicationContext.getBean(DeptController.class);System.out.println(bean2);//根据bean的名称 及 类型获取DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);System.out.println(bean3);}
}

默认单例,都是同一个对象(这里主要针对于默认的单例非延迟加载的bean而言。)
1

注意事项:

  • IOC容器中的bean默认使用的作用域:singleton (单例)
  • 默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)

2.2 Bean作用域

作用域说明
singleton容器内同名称的bean只有一个实例(单例)(默认)
prototype每次使用该bean时会创建新的实例(非单例)

Spring中的@Scope注解来进行配置作用域:
1

注意事项:

  • prototype的bean,每一次使用该bean的时候都会创建一个新的实例
  • 实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性

2.3 第三方Bean

1
1
声明形参,自动装配:
1

三、剖析Springboot的底层原理

3.1 起步依赖

starter启动器 :maven的依赖传递

3.2 自动配置

SpringBoot项目在启动时通过自动配置完成了bean对象的创建。

SpringBoot的自动配置就是当Spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。
1

@Configuration底层包括service/controller…都是@Component

3.2.1 第三方类装配

自动装配需要满足:

  1. 添加注解
  2. 注解被spring的组件扫描到

如果需要使用第三方类,除了添加注解,也要确保注解会被扫描到:

  • 方案1:@ComponentScan 组件扫描
  • 方案2:@Import 导入(使用@Import导入的类会被Spring加载到IOC容器中)
  • 方案1:@ComponentScan
@SpringBootApplication
@ComponentScan({"com.wake","com.example"}) //指定要扫描的包
public class SpringbootWebConfig2Application {public static void main(String[] args) {SpringApplication.run(SpringbootWebConfig2Application.class, args);}
}
  • 方案2:@Import 导入

导入形式主要有以下几种:

  1. 导入普通类
  2. 导入配置类
  3. 导入ImportSelector接口实现类
  4. 使用第三方依赖提供的 @EnableXxxxx注解

import:

@Import(TokenParser.class) //导入的类会被Spring加载到IOC容器中
@SpringBootApplication
public class SpringbootWebConfig2Application {public static void main(String[] args) {SpringApplication.run(SpringbootWebConfig2Application.class, args);}
}

EnableXxxxx:

  • 第三方依赖中提供的注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(MyImportSelector.class)//指定要导入哪些bean对象或配置类
public @interface EnableHeaderConfig { 
}
  • 在使用时只需在启动类上加上@EnableXxxxx注解即可
@EnableHeaderConfig  //使用第三方依赖提供的Enable开头的注解
@SpringBootApplication
public class SpringbootWebConfig2Application {public static void main(String[] args) {SpringApplication.run(SpringbootWebConfig2Application.class, args);}
}

3.2.2 原理分析

@SpringBootApplication:
1


总结

Web后端开发总结:

1
1

SpringMVC不是一个单独的框架,它是Spring框架的一部分,是Spring框架中的web开发模块,是用来简化原始的Servlet程序开发的。

源码跟踪技巧:

  • 在跟踪框架源码的时候,一定要抓住关键点,找到核心流程。
  • 一定不要从头到尾一行一行代码去看,一个一个方法的去研究,一定要找到关键流程,抓住关键点,
  • 先在宏观上对整个流程或者整个原理有一个认识,有精力再去研究其中的细节。

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

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

相关文章

计算机专业学习单片机有什么意义吗?

玩单片机跟玩计算机区别还是很大的, 单片机有众多的种类,每一种又可能有很多个系列.可以说单片机就是为了专款专用而生的.这样来达到产品成本的降低,这就是现在身边的很多的电子产品价格一降再降的原因之一.在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一…

阅读FAST-LIO2(Lidar-IMU)论文

一、摘要 本文介绍了 FAST-LIO2&#xff1a;一种快速、稳健且通用的 LiDAR 惯性里程计框架。 FASTLIO2 建立在高效紧耦合迭代卡尔曼滤波器的基础上&#xff0c;具有两个关键创新&#xff0c;可实现快速、稳健和准确的 LiDAR 导航&#xff08;和映射&#xff09;。第一个是直接将…

热门主食冻干希喂/PURPOSE/百利测评对比!真实喂养分享!

在当今科学养宠的时代里&#xff0c;主食冻干已经成为猫咪日常饮食的重要一环。主食冻干的高肉含量特性使其易于被猫咪吸收和消化&#xff0c;同时&#xff0c;它还能提供其他猫粮所无法提供的微量物质&#xff0c;满足猫咪的全面营养需求。然而&#xff0c;面对市面上众多品牌…

Java SPI 机制

SPI 机制的定义 在Java中&#xff0c;SPI&#xff08;Service Provider Interface&#xff09;机制是一种用于实现软件组件之间松耦合的方式。它允许在应用程序中定义服务接口&#xff0c;并通过在类路径中发现和加载提供该服务的实现来扩展应用程序功能。 SPI 机制通常涉及三…

信创实力进阶,Smartbi再获华为云鲲鹏技术认证

日前&#xff0c;经华为技术有限公司评测&#xff0c;思迈特商业智能与数据分析软件Smartbi Insight V11与华为技术有限公司Kunpeng 920 Taishan 200完成并通过相互兼容性测试认证&#xff0c;成功再获华为云鲲鹏技术认证书&#xff0c;标志着Smartbi与华为云鲲鹏产业生态合作更…

动态规划相关题目

文章目录 1.动态规划理论基础2.斐波那契数3.爬楼梯4.使用最小花费爬楼梯5.不同路径6.不同路径 II7. 整数拆分8. 不同的二叉搜索树 1.动态规划理论基础 1.1 什么是动态规划? 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一…

安卓逆向 | JEB静态分析APK

JEB反编译APK-静态审计&#xff0c;找到加密算法 参考来源&#xff1a;https://blog.csdn.net/weixin_38819889/article/details/108910525 apk来源&#xff1a;https://app5.scrape.center/ 软件&工具&#xff1a;JEB / 雷电模拟器 / burpsuite 声明&#xff1a;scrape.ce…

浅模仿小米商城布局(有微调)

CSS文件 *{margin: 0;padding: 0;box-sizing: border-box; }div[class^"h"]{height: 40px; } div[class^"s"]{height: 100px; } .h1{width: 1528px;background-color: green; } .h11{background-color:rgb(8, 220, 8); } .h111{width: 683px;background-c…

【差分约束+并查集】第十三届蓝桥杯省赛C++ A组 Java A组/研究生组《推导部分和》(C++)

【题目描述】 【输入格式】 【输出格式】 【数据范围】 【输入样例】 5 3 3 1 5 15 4 5 9 2 3 5 1 5 1 3 1 2 【输出样例】 15 6 UNKNOWN 【思路】 题解来源&#xff1a;AcWing 4651. $\Huge\color{gold}{推导部分和}$ - AcWing 【代码】 #include<bits/stdc.h> #define…

PostgreSQL FDW(外部表) 简介

1、FDW: 外部表 背景 提供外部数据源的透明访问机制。PostgreSQL fdw(Foreign Data Wrapper)是一种外部访问接口,可以在PG数据库中创建外部表,用户访问的时候与访问本地表的方法一样,支持增删改查。 而数据则是存储在外部,外部可以是一个远程的pg数据库或者其他数据库(…

基于java+springboot+vue实现的成都旅游网系统(文末源码+Lw+ppt)23-358

摘 要 人类现已迈入二十一世纪&#xff0c;科学技术日新月异&#xff0c;经济、资讯等各方面都有了非常大的进步&#xff0c;尤其是资讯与网络技术的飞速发展&#xff0c;对政治、经济、军事、文化等各方面都有了极大的影响。 利用电脑网络的这些便利&#xff0c;发展一套成…

代码随想录算法训练营Day60 ||leetCode 84.柱状图中最大的矩形

84.柱状图中最大的矩形 这题和接雨水的题有些像&#xff0c;只不过此处使用的是递增栈&#xff0c;因为矩形的面积想要增加宽度时&#xff0c;需要考虑两边最低的矩形&#xff0c;而为了让所有数据都参加运算&#xff0c;需要前后补0&#xff0c;来弹出栈里所有元素 class Sol…

15 Games101 - 笔记 - 光线追踪(辐射度量学、BRDF与渲染方程)

15 光线追踪&#xff08;辐射度量学、BRDF与渲染方程&#xff09; 基于物理渲染的基础知识 摘要 本篇文章将会从基于物理渲染(PBR)的动机开始讲起&#xff0c;逐步介绍PBR相关的基础知识&#xff0c;如辐射度量学(怎么用物理量精确的描述光线)&#xff0c;以及通过辐射度量学…

MySQL高阶SQL语句

文章目录 MySQL高阶SQL语句MySQL常用查询1、按关键字排序1.1 语法1.2 ASC和DESC1.3 对数据表中信息进行排序1.3.1 普通排序1.3.2 结合where进行条件过滤1.3.3 对多个字段进行排序 2、区间判断及查询不重复记录2.1 and/or —— 且/或2.1.1 普通查询2.1.2 嵌套/多条件查询 2.2 di…

OD C卷 - 反射计数

反射计数&#xff08;200&#xff09; 给定一个包含0 、1的二维矩阵&#xff1b;一个物体从给定的初始位置出发&#xff0c;在给定的速度下移动&#xff0c;遇到矩阵的边缘则发生镜面反射&#xff0c;无论物体经过0还是1&#xff0c;都不影响其速度&#xff1b;经过t时间单位后…

【unity】如何汉化unity编译器

在【unity】如何汉化unity Hub这篇文章中&#xff0c;我们已经完成了unity Hub的汉化&#xff0c;现在让我们对unity Hub安装的编译器也进行下汉化处理。 第一步&#xff1a;在unity Hub软件左侧栏目中点击安装&#xff0c;选择需要汉化的编译器&#xff0c;再点击设置图片按钮…

淘宝自动发货接口是指淘宝开放平台提供的一种接口,用于实现商家在淘宝平台上自动发货的功能

淘宝自动发货接口是指淘宝开放平台提供的一种接口&#xff0c;用于实现商家在淘宝平台上自动发货的功能。通过该接口&#xff0c;商家可以将订单信息与物流信息传递给淘宝平台&#xff0c;由平台自动完成订单发货的操作&#xff0c;提高发货效率和准确性。 淘宝自动发货接口的…

手机termux免root安装kali:一步到位+图形界面_termux安装kali-

1.工具 安卓包括鸿蒙手机、WiFi、充足的电量、脑子 2.浏览器搜索termuxvnc viewer下载安装。 3.对抗华为纯净模式需要一些操作先断网弹窗提示先不开等到继续安装的时候连上网智能检测过后就可以了 termux正常版本可以通过智能监测失败了就说明安装包是盗版 4.以后出现类似…

Jenkins常用插件安装及全局配置

Jenkins常用插件安装及全局配置 前言 ​ Jenkins是一个流行的持续集成工具&#xff0c;通过安装适用的插件&#xff0c;可以扩展Jenkins的功能&#xff0c;并与其他工具和系统集成。本文将介绍一些常用的Jenkins插件以及安装和配置的步骤。通过安装和配置这些常用插件&#xf…

【EI会议征稿通知】电子、通信与智能科学国际会议(ECIS 2024)

电子、通信与智能科学国际会议&#xff08;ECIS 2024&#xff09; The International Conference on Electronics, Communications and Intelligent Science 电子、通信与智能科学国际会议&#xff08;ECIS 2024&#xff09;将于2024年05月24日-05月27日在中国长沙召开。ECIS…