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();

}

相关推荐
sheji52613 分钟前
JSP基于信息安全的读书网站79f9s--程序+源码+数据库+调试部署+开发环境
java·开发语言·数据库·算法
毕设源码-邱学长4 分钟前
【开题答辩全过程】以 基于Java Web的电子商务网站的用户行为分析与个性化推荐系统为例,包含答辩的问题和答案
java·开发语言
摇滚侠19 分钟前
Java项目教程《尚庭公寓》java项目从开发到部署,技术储备,MybatisPlus、MybatisX
java·开发语言
€81132 分钟前
Java入门级教程24——Vert.x的学习
java·开发语言·学习·thymeleaf·数据库操作·vert.x的路由处理机制·datadex实战
Mr_star_galaxy40 分钟前
【JAVA】经典图书管理系统的实现
java
昊坤说不出的梦1 小时前
【实战】监控上下文切换及其优化方案
java·后端
疯狂踩坑人1 小时前
【Python版 2026 从零学Langchain 1.x】(二)结构化输出和工具调用
后端·python·langchain
今天_也很困2 小时前
LeetCode热题100-560. 和为 K 的子数组
java·算法·leetcode
在繁华处2 小时前
线程进阶: 无人机自动防空平台开发教程V2
java·无人机
A懿轩A2 小时前
【Java 基础编程】Java 变量与八大基本数据类型详解:从声明到类型转换,零基础也能看懂
java·开发语言·python