JavaWeb开发06-原理-Spring配置优先级-Bean管理-SpringBoot原理-Maven继承和聚合-私服

一、Spring配置优先级

不同配置文件,配置同一个属性谁有效

properties>yml>yaml

命令行参数>Java系统属性

项目打包后要改变属性:

红色是Java系统属性,绿色是命令行参数

'

二、Bean管理

1.获取bean

获取IOC容器:applicationContext就是IOC容器对象

IOC容器中bean是默认单例的只有一个,这样三个获取的bean是同一个

2.bean作用域

单例还是多例取决于作用域

关注于Spring支持前两种作用域

默认单例的bean在容器启动的时候就会实例化,加lazy注解就会在第一次使用的时候才会实例

3.第三方bean

想要对Java自带的包中的类交给IOC管理,但是是只读的,所以得在使用第三方bean

可以放在config包中,设置一个专门的类来集中分类配置

没有设置bean的名字就是默认方法名

三、SpringBoot原理

Spring Framework依赖配置很麻烦,Spring Boot 简化了操作

1.起步依赖

在web开发中引入一个依赖就可以,是因为maven的依赖传递

2.自动配置

bean和配置类如何加入到IOC容器内的?

配置类就是家里@Configration的类

①自动配置原理

SpringBoot只能扫描启动包及其子包

这样来表示要扫描的包有哪些,com.example是引入的包,com.itheima是本项目包所在

这样很繁琐,大面积的扫描

但是这种方法还是需要知道要导入第三方依赖中的哪些类,所以应该在第三方依赖中有块地方告诉导入者你要导入哪些?

第三方依赖中有个Enable开头的注解,里面包含了Import注解,表示了要导入哪些类,在Spring中只需要加上这个Enable开头的注解就可以了。

②源码跟踪

可以从这个注解入手,先从宏观上看结构

AutoConfiguration中Import了一个ImportSelector的实现类,其中的一个selectImports方法中封装了哪些类需要导入到SpringBoot的IOC容器中。

这两个文件中包含了要加载配置类的全类名,在这个配置类中表明了哪些类对象要被加载进IOC容器中,SpringBoot启动后就可以在程序中直接自动注入这个Bean对象。

而这些Bean不会全部都注册到IOC容器中,因为ConditionalOnMissingBean注解的存在。按条件装配,当条件满足才会装配。

③@Conditional

关注这三个子注解

OnClass

代表环境中是否存在Jwts这个类才会注册

OnMissingBean

代表环境中不存在这个类型的bean,意思就是有没有HeaderParser这个Bean,一般应用在用户想要自定义bean的时候,不想就是默认的

OnProperty

代表配置文件中是否存在指定属性与值,存在才会配置

3.自动配置案例-starter

有一些第三方技术没有提供与SpringBoot整合的起步依赖,但是又是很通用的,例如之前的阿里云的OSS

黄色部分定义了该程序所需要的全部依赖,并且引入了上面红色部分的包

目的是在项目中导入starter就可以在项目中直接使用AliyunOSSUtils这个工具类的bean,所以需要在autoconfigure中存在一个配置类,使用第三方bean的技术,新建一个方法加了注解bean,并返回一个AliyunOSSUtils对象。

对于starter中只在poml文件中引入了autoconfigure的依赖,来进行依赖管理

对于autoconfigure,首先在pom文件中引入了oss所需的依赖

而在autoconfigure中有一个专门的配置类,来集中分类配置,表示哪些需要交给IOC容器管理,所以有@Configuration的注解代表是配置类

@EnableConfigurationProperties这个注解代表是将AliOSSProperties交给IOC容器管理,下面需要这个bean只需要指定这个参数就行了。

对于工具类aliOSSUtils是我们最终需要直接自动配置的bean,由于里面需要AliOSSProperties对象中的值,所以在autoConfigure中需要通过那个注解将AliOSSProperties交给IOC管理,就可以注入spring中yml中的相应的值

最后需要在这个路径下定义这个文件,表示要导入哪些配置类或者类,spring启动后就会加载这个文件,将要导入的配置类交给IOC容器。

四、总结

Mybatis是操作数据库的,Spring Boot来简化Spring开发的

SpringMVC是Spring framework web开发的一部分,是来简化原始servlet程序的

基于传统SSM开发是比较繁琐的,效率比较低

五、Maven高级

1.分模块设计与开发

2.继承

①继承关系

就是子工程中很多都会用到的依赖可以放到父工程中。

实现就是在子工程pom中定义parent标签

打包方式:

由于springboot项目默认父工程为spring-boot-stater-parent,而继承只能单继承所以需要我们继承parent,parent再继承这个spring的工程

parent pom文件中:

子工程中:

②版本锁定

就是对依赖在父工程中进行统一管理

对版本号还可以统一查看修改:

3.聚合

六、私服

1.介绍

2.资源上传与下载

你上传的pom中的<version>指定了版本,会上传到不同仓库

1,3得在maven文件中的settings.xml修改

上传是maven生命周期中的deploy。

下载直接在另外工程中pom中引入需要的依赖

相关推荐
禁默26 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Cachel wood32 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Code哈哈笑35 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
gb421528738 分钟前
springboot中Jackson库和jsonpath库的区别和联系。
java·spring boot·后端
程序猿进阶38 分钟前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
zfoo-framework1 小时前
【jenkins插件】
java
风_流沙1 小时前
java 对ElasticSearch数据库操作封装工具类(对你是否适用嘞)
java·数据库·elasticsearch
ProtonBase1 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
乐之者v1 小时前
leetCode43.字符串相乘
java·数据结构·算法