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中引入需要的依赖

相关推荐
陈大爷(有低保)10 分钟前
UDP Socket聊天室(Java)
java·网络协议·udp
kinlon.liu24 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
王哲晓1 小时前
Linux通过yum安装Docker
java·linux·docker
java6666688881 小时前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存1 小时前
源码分析:LinkedList
java·开发语言
执键行天涯1 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
Jarlen1 小时前
将本地离线Jar包上传到Maven远程私库上,供项目编译使用
java·maven·jar
蓑 羽1 小时前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
Reese_Cool1 小时前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言