目录
问题1:maven的优势有哪些?
问题2:jar包是如何产生冲突的?
jar包冲突的解决方案
问题3:依赖传递性原理是什么?
问题4:怎么理解sping容器?
DAY01
一、
JDBC连接数据库
开发效率高,运行慢;
1.sping核心是sping,简化框架的开发 理解:springboot是框架的框架
2.spingMVC 理念:主要负责是负责前后端交互
媒介:http(不安全) https(安全) 密钥:证书(公钥私钥) 协议
TCP/IP协议(3次五首规则) 速度很快
常用工具:ajax
3.spring框架
主要作用:主要整合第三方框架,使得程序可以以一种统一的方式进行管理
核心规范概念:控制反转(IOC) 依赖注入(DI) 面向切面编程(AOP)
二、关于maven
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具。
问题1:maven的优势有哪些?
1、maven的创建本地仓库管理项目
2、maven的生命周期(install clean指令) 前者用来打包项目传给后面人员开发 后者清包
3、maven的坐标,maven可以管理依赖jar包,根据需求找坐标添加jar包
4、解决jar包版本不兼容问题
问题2:jar包是如何产生冲突的?
A->B->C->D1(log 15.0):A中包含对B的依赖,B中包含对C的依赖,C中包含对D1的依赖,假设是D1是日志jar包,version为15.0
E->F->D2(log 16.0):E中包含对F的依赖,F包含对D2的依赖,假设是D2是同一个日志jar包,version为16.0
当pom.xml文件中引入A、E两个依赖后,根据Maven传递依赖的原则,D1、D2都会被引入,而D1、D2是同一个依赖D的不同版本。
当我们在调用D2中的method1()方法,而D1中是15.0版本(method1可能是D升级后增加的方法),可能没有这个方法,这样JVM在加载A中D1依赖的时候,找不到method1方法,就会报NoSuchMethodError的错误,此时就产生了jar包冲突。
jar包冲突的解决方案
A->B->C->D1(log 15.0):A中包含对B的依赖,B中包含对C的依赖,C中包含对D1的依赖,假设是D1是日志jar包,version为15.0
E->F->D2(log 16.0):E中包含对F的依赖,F包含对D2的依赖,假设是D2是同一个日志jar包,version为16.0
当pom.xml文件中引入A、E两个依赖后,根据Maven传递依赖的原则,D1、D2都会被引入,而D1、D2是同一个依赖D的不同版本。
当我们在调用D2中的method1()方法,而D1中是15.0版本(method1可能是D升级后增加的方法),可能没有这个方法,这样JVM在加载A中D1依赖的时候,找不到method1方法,就会报NoSuchMethodError的错误,此时就产生了jar包冲突。
Maven 解析 pom.xml 文件时,同一个 jar 包只会保留一个
>>>Maven默认处理策略最短路径优先
Maven 面对 D1 和 D2 时,会默认选择最短路径的那个 jar 包,即 D2。E->F->D2 比 A->B->C->D1 路径短
>>>最先声明优先 如果路径一样的话,如: A->B->C1, E->F->C2 ,两个依赖路径长度都是 2,那么就选择最先声明。
用于使用的jar包都来源于本地库,本地库的jar包来源于私服镜像和远程服务器
三、ideal如何整合maven(回顾下之前第二阶段)
前提:打开设置先去配置meaven的setting.xml(里面本地仓库以及镜像仓库) 确定maven的安装路径
第一步: 创建springboot工程,勾选web
第二步: 在boot工程中创建maven项目,刷新下载或更新jar包
第三步: 项目里分层控制层 测试 启动类(RunApp)
3.1延申之maven坐标
manven坐标主要是标识项目,并且标识 唯一标识。可通过此被依赖
项目操作时,与本地仓库一一对应
3.2 maven命令
clean用来清空项目中的target文件
Install用来打包文件生成target文件
3.2.1打包的类型
1)jar包文件>>>适合springboot项目/工具API项目/框架的项目
2)war包文件>>>动态web项目 JSP类型 tomcat服务器
3)pom类型>>>POM类型表示”聚合工程“(指多个项目合并在一起),里面有若干子项目,管理灵活。微服务架构设计一般采用POM类型。
每次打包,会在2个位置生成jar包文件
位置1:target文件目录中
位置2:根据坐标,在本地仓库中生成具体的jar包文件,该文件可以被其它项目“依赖“
3.3mavenjar包依赖的传递性
案例:用户只需引入特定的jar包文件,则maven可以通过依赖的传递性,实现其它jar包文件的传入
数据结构说明:
A的jar依赖Bjar Bjar依赖Cjar 如果只导入Ajar则自动依赖B/C
3.3.1Jar传递性的实现原理
问题3:依赖传递性原理是什么?
第一步当maven扫描依赖信息时,会根据坐标找到对应的jar包文件
第二步之后扫描当前目录下的xx.pom文件
第三步根据pom文件中的依赖项depenency再次查找其它的依赖jar包,直到所有jar包依赖完成为止。
3.3.2jar包传递安全性的问题(扩展)
问题:jar包文件都是通过网络下载而来的,如何保证文件不被篡改?
四、关于hash基本常识
问:数据据相同以及相同的算法,hash值必定相同!!
问:数据不同,但hash算法相同,hash值可能相同!!比如hash的碰撞(不同的数据经过相同的算法得到同样的hash值)
五、关于Springboot版本管理说明
补充说明1:spring-boot-dependencies是sprigboot官方进行i调试之后,将所有的管理的jar包进行了定义,从根本上解决了jar包版本冲突的问题。不用写版本号,一般是
补充说明2:如果需要引入其它的jar包文件,只需要添加jiar包名称即可。
补充说明3:特殊的jar包文件你,需要手动添加版本号。
六、关于pom文件里面build标签作用
说明:当spingboot项目需要打包时,sprngboot中的build标签会起作用,将springboot按照可以执行的方式打成jar包文件。如果没有启动时候会报错(error:没有主清单)
运行打包DOS命令格式: java -jar 包名.jar
七、关于配置文件说明
7.1配置文件名字
springboot项目,默认配置文件的名称 application.properties 名称固定
7.2properties语法说明
1)语法说明
数据结构 key=value
value中间不要有空格
properties文件程序默认读取采用8859编码
pro文件中key名字不能复用
7.3YML语法说明
1)语法说明
数据结构”key“(空格)value
server
port:
key的关键字有层级缩进效果,注意缩进
YML文件默认次啊用UTF-8编码格式
value中不要有太多的空格
yml文件中的key的名称不能复用,注意层级(第二层在第一层基础缩进)
八、动态为属性赋值(重要)
需求说明:
一些回将名称直接写死到变量中,如果后续需要修改,则需要改变原阿门,后期维护不方便。
解决方案: 第一种:动态为属性赋值。
>>>编辑YML文件
第二种:用pro文件为属性赋值
>>>编辑YML文件 它是spring的核心配置文件,主要的目的是为了整合第三方框架而使用的
九、关于IOC的说明
具体含义:将创建对象的权力交给spring容器管理
原因:如果将对象自己管理,则必然出现“耦合性高”现象,不方面扩展
容器:是一种数据结构类型 Map
KEY: 类名首字母小写
问题4:怎么理解sping容器?
vaue:spring为当前的类创建的对象只要程序启动成功,则Map集合中(容器),里边包含了所有的IOC管理的对象。
Day02
sping容器管理对象用法



