springboot的配置文件,以及spring boot自动装配的原理,bean的管理。

配置优先级:
    spring boot中自此三种格式的配置文件:
        server.port:8081
        server.port:8082
        server.port:8083
    spring boot还支持两种外部配置:
        java系统属性:
            -Dserver.port=9000
        命令行参数:
            --server.port=9002
    在cmd窗口运行jar包:
        java -jar springboot-web-config-0.0.1-SNAPSHOT.jar
        java -Dserver.port=9001 -jar springboot-web-config-0.0.1-SNAPSHOT.jar
        java  -jar springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=9002
        java -Dserver.port=9001 -jar springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=9002
        java -Dspring.datasource.password=123root  -jar springboot-web-config-0.0.1-SNAPSHOT.jar
        java -Dspring.datasource.password=123root  -jar springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=9002
    注意:
        Springboot项目进行打包时,需要引入插件 spring-boot-maven-plugin (基于官网骨架创建项目,会自动添加该插件)


Bean管理:
    获取Bean:
        默认获取:
            默认情况下,Spring项目启动时,会把bean都创建好放在IOC容器中。
                @Autowired
    private ApplicationContext applicationContext;
        主动获取:
            根据name获取:
                Object getBean(String name)
            根据类型获取:
                <T> T getBean(Class<T> requiredType)

            根据name和bean类型获取:
                <T> T getBean(String name, Class<T> requiredType)

    Bean作用域:
        五种作用域:
            singleton
                容器内同名称的bean,只能有一个实例(单例)默认
            prototype
                每次使用该 bean 时会创建新的实例(非单例)
            request
                每个请求范围内会创建新的实例(web环境中,了解即可)
            session
                每个会话范围内会创建新的实例(web环境中,了解)

            application
                每个应用范围内会创建新的实例(web环境中,了解)

        注意事项:
            默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)。

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

    第三方Bean:
        如果要管理的bean对象来自于第三方(不是自定义的),是无法用 @Component 及衍生注解声明bean的,就需要用到 @Bean注解。

        若要管理的第三方bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类。

        注意:
            通过@Bean注解的name或value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名。

            如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配。


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

        实现方案:
            方案一:
                使用@ComponentScan组件扫描注解,手动扫描引入的第三方依赖中的bean
            方案二:
                说明:@Import 导入。使用@Import导入的类会被Spring加载到IOC容器中,导入形式主要有以下几种:

                导入普通类:
                    @Import(TokenParser.class)  //普通类 --> 交给ioc容器管理,成为ioc容器
                导入配置类:
                    @Import(HeaderConfig.class)   //配置类 --> 配置类中的的所有bean都交给ioc容器管理,并成为ioc容器的bean
                导入 ImportSelector接口实现类:
                    @Import(MyImportSelector.class) //ImportSelector 接口实现类 ---> 批量导入
                @EnableXxxx注解,封装@Import注解 

                    @EnableHeaderConfig
        源码跟踪:
            @SpringBootApplication注解:
                介绍:
                    该注解标识在SpringBoot工程引导类上,是SpringBoot中最最最重要的注解。该注解由三个部分组成:

                组成:
                    1.@SpringBootConfiguration:该注解与 @Configuration 注解作用相同,用来声明当前也是一个配置类。

                    2.@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。

                    3.@EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。
                自动装配原理:@Conditional
                        @Bean
   // @ConditionalOnClass(name = "io.jsonwebtoken.Jwts") //判断环境中是否存在对应的字节码文件,如果存在才祖册bean
    public HeaderParser headerParser(){
        return new HeaderParser();

    }
                      // @ConditionalOnMissingBean //判断环境中是否存在该bean,如果不存在,在注册
    public HeaderParser headerParser(){
        return new HeaderParser();

    }
                        @ConditionalOnProperty(name = "sde",havingValue = "666")
    public HeaderParser headerParser(){
        return new HeaderParser();

    }
 

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

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

相关文章

软件测试人才稀缺!揭秘为什么你找不到软件测试工作?

最近后台很多粉丝给我留言&#xff1a; 2023年软件测试已经崩盘了吗&#xff0c;为什么都找不到工作了&#xff1f; 确实&#xff0c;今年经济大环境不好&#xff0c;企业也都在降本增效&#xff0c;如果技术能力还在被应届生竞争岗位的阶段&#xff0c;只会越来越难。 找不…

【大数据面试】YARN常见问题与答案

目录 介绍下YARN YARN有几个模块 YARN工作机制 YARN有什么优势&#xff0c;能解决什么问题? YARN容错机制 YARN高可用 YARN调度器 YARN中Container是如何启动的? YARN的改进之处&#xff0c;Hadoop3.x相对于Hadoop 2.x? YARN监控 介绍下YARN YARN有几个模块 Yar…

74.搜索二维矩阵

题目 法1&#xff1a;二分搜索 剑指原题 class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m matrix.length, n matrix[0].length;int i 0, j n - 1;while (i < m && j > 0) {if (matrix[i][j] target) {return true;} el…

从零开始在Linux服务器配置并运行YOLO8+Web项目

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 神经网络&#xff08;随缘更新&#xff09; ✨特色…

『OPEN3D』1.5.4 动手实现点云八叉树(OctoTree)最近邻

本专栏地址: https://blog.csdn.net/qq_41366026/category_12186023.html?spm=1001.2014.3001.5482 在二维和三维空间中,我们可以采用四叉树(Quad tree)和八叉树(Octree)这两种特定的数据结构来处理空间分割。这些树形结构可以看作是K-d树在不同维度下的扩展。…

SpringBoot的多环境开发

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

JS - 闭包(Closure)

目录 1&#xff0c;什么是闭包2&#xff0c;创建闭包3&#xff0c;如何销毁闭包2.1&#xff0c;自动创建的闭包2.2&#xff0c;手动创建的闭包 4&#xff0c;闭包的特点和使用场景3.1&#xff0c;特点3.2&#xff0c;使用场景避免全局变量污染函数柯里化 5&#xff0c;闭包经典…

【高级网络程序设计】Block1总结

这一个Block分为四个部分&#xff0c;第一部分是Introduction to Threads and Concurrency &#xff0c;第二部分是Interruptting and Terminating a Thread&#xff0c;第三部分是Keep Threads safety&#xff1a;the volatile variable and locks&#xff0c;第四部分是Beyon…

【算法系列篇】递归、搜索和回溯(四)

文章目录 前言什么是决策树1. 全排列1.1 题目要求1.2 做题思路1.3 代码实现 2. 子集2.1 题目要求2.2 做题思路2.3 代码实现 3. 找出所有子集的异或总和再求和3.1 题目要求3.2 做题思路3.3 代码实现 4. 全排列II4.1 题目要求4.2 做题思路4.3 代码实现 前言 前面我们通过几个题目…

提升研究效率,尽在EndNote 21 forMac/win!

在科研领域&#xff0c;文献管理是一项至关重要的任务。研究人员需要快速而准确地收集、整理和引用大量的文献资料&#xff0c;以支持他们的研究工作。而EndNote 21作为一款功能强大的文献管理软件&#xff0c;能够帮助研究人员高效地管理文献资源&#xff0c;提升研究工作的效…

【Linux基础】1. Linux 启动过程

文章目录 【 1. 内核的引导 】【 2. 运行init 】 运行级别 【 3. 系统初始化 】【 4. 建立终端 】【 5. 用户登录系统 】【 6. 图形模式与文字模式的切换方式 】【 7. Linux关机 】 Linux系统的启动过程分为 5个阶段&#xff1a; &#xff08;1&#xff09;内核的引导。 &#…

docker nginx 部署静态网站

1、dockerfile FROM nginx AS baseWORKDIR /appEXPOSE 80COPY . /app2、dockercompose.yaml version: 3 services:adminservice:container_name: adminwebbuild:context: ./dockerfile: Dockerfileports:- "5000:80"labels:description: adminwebrestart: always3、…

Java中线程状态的描述

多线程-基础方法的认识 截止目前线程的复习 Thread 类 创建Thread类的方法 继承Thread类,重写run方法实现Runnable接口,重写run方法使用匿名内部类继承Thread类,重写run方法使用匿名内部类实现Runnable接口,重写run方法使用Lambda表达式 run方法中的所有的代码是当前线程对…

ubuntu 20.04 docker

ubuntu 20.04 docker https://docs.docker.com/engine/install/ubuntu/ Ubuntu20.04下部署linux资源监控平台&#xff08;docker部署&#xff09;grafanaprometheusnode_exporter&#xff08;docker离线包&#xff09; https://blog.csdn.net/deer_cui/article/details/1340208…

React面试题:对componentWillReceiveProps的理解

React面试题&#xff1a;对componentWillReceiveProps的理解 回答思路&#xff1a;是什么--->干什么用的-->优点-->什么时候用是什么&#xff1f;干什么用的&#xff1f;优点什么时候用&#xff1f; 回答思路&#xff1a;是什么—>干什么用的–>优点–>什么时…

已知IP地址,求能容纳一定数量IP地址的DHCP服务器的主机数量和子网掩码

求能容纳的主机数量&#xff1a;2的n次方-2 > 所需的主机数量 [由于广播地址&#xff08;255&#xff09;和网络地址&#xff08;0&#xff09;要保留&#xff0c;所以求主机数量时要-2] 子网掩码&#xff1a;采用1 2 4 8法&#xff08;2的0次方、2的1次方、2的2次方、2的3次…

第二百一十六回 分享一种更新页面数据的方法

文章目录 1. 概念介绍2. 实现方法2.1 实现思路2.2 实现方法3. 示例代码4. 内容总结我们在上一章回中介绍了"如何创建单例模式"相关的内容,本章回中将 分享一种更新页面数据的方法.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍一种更新页…

测站坐标系统 -- 东北天(ENU)坐标系、站心坐标系

目录 一、测站坐标系的定义 二、测站坐标系与地心地固坐标系的转换 2.1地心地固坐标系转到测站坐标系 2.2测站坐标系转到地心地固坐标系 三、方位角和高度角的计算 一、测站坐标系的定义 测站坐标系统以观测站( 或地面上某一个观测点 ) 为中心建立坐标系统&#xff0c;将这…

SQL基础:记录的基本操作

在上一节中&#xff0c;我们进行了表的新建&#xff0c;这一节我们讲一下记录的增加、修改、删除、查询。 增加 增加即使用insert语句&#xff0c; INSERT INTO users (user_id, username, password, email) VALUES (2, jane_smith, pass456, janeexample.com);查看插入的数…

代码随想录第三十六天(一刷C语言)|背包问题理论基础分割等和子集

创作目的&#xff1a;为了方便自己后续复习重点&#xff0c;以及养成写博客的习惯。 一、背包问题 题目&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装…