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