diff --git a/Spring/Spring5/00 概述.md b/Spring/Spring5/00 概述.md new file mode 100644 index 00000000..23bdeab9 --- /dev/null +++ b/Spring/Spring5/00 概述.md @@ -0,0 +1,80 @@ +## 1 概述 +> 参考教程 +> [尚硅谷Spring5课程]() + + +> 主要内容架构 +> * 基本概念 +> * IOC容器 +> * AOP +> * Jdbc +> * 事务 +> * Spring5-webflux +### 概念 + +* 开放源代码的JavaEE应用程序框架 +* 针对bean的生命周期进行管理的轻量级容器 + +### 特点 + +* 解决应用开发的复杂性。降低JavaApi的使用 +* 方便解耦,简化开发。 +* AOP变成支持 +* Test方便测试 +* integeration方便整合集成 +* 方便进行事务操作 + +### 核心 + +* IOC:控制反转,把创建对象的过程交给Spring进行挂历。 +* Aop:面向切面,不修改源代码的情况下,进行功能的增强。 + + +## 2 入门实例 + +1. 创建普通java工程。 +2. 将jar包导入指定目录下,并添加idea以来路径。 + + +3. 使用bean标签完成spring配置 + +```java + + + + + + +``` +4. spring加载xml文件,获取bean对象 + 1. 最简单的使用方式,所以spring本质上是一种轻量级的框架。 + 2. 将bean放到context中 + 3. 从context中获取指定id的Bean。 + +```java +package com.ykl.testdemo; + +import com.ykl.User; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * @author yinkanglong + * @version : Test01, v 0.1 2022-10-08 11:27 yinkanglong Exp $ + */ +public class Test01 { + @Test + public void testAdd(){ +// 加载spring的配置文件 + ApplicationContext context = new ClassPathXmlApplicationContext("bean01.xml"); +// 获取配置创建的对象 + User user = context.getBean("user", User.class); + System.out.println(user); + user.add(); + } + +} +``` \ No newline at end of file diff --git a/Spring/Spring5/01 IOC Container.md b/Spring/Spring5/01 IOC Container.md new file mode 100644 index 00000000..533c5db5 --- /dev/null +++ b/Spring/Spring5/01 IOC Container.md @@ -0,0 +1,551 @@ +## 1 IOC容器原理 +### IOC概念 +* 控制反转。把对象创建和对象调用的过程,交给Spring进行管理。 +* 使用IOC的目的:降低代码耦合度。 + + +### 底层原理 + + +* xml解析 +* 工厂模式 +* 反射 + + +1. java对象调用的过程 +![](image/2022-10-08-11-53-59.png) +```java +class UserDao{ + add(){ + + } +} +public class UserService{ + public void execute(){ + UserDao dao = new UserDao(); + dao.add(); + } +} +``` +2. 使用工厂模式 +![](image/2022-10-08-11-54-46.png) +```java +class UserDao{ + add(){ + + } +} +class UserFactory{ + public static UserDao getDao(){ + return new UserDao(); + } +} + +class UserService{ + execute(){ + UserDao dao = UserFactory.getDao(); + dao.add(); + } +} +``` + +3. IOC模式实现。通过xml解析、工厂模式、反射,进一步降低耦合度。 + 1. 创建xml配置文件 + 2. 创建工厂类,解析xml,使用IOC机制创建对象。 + 3. 降低耦合度,不依赖java对象,而是通过配置文件决定具体实例化的对象。根据id查找class.forName(className),加载字节码文件,通过Instance方法,实例化对象。值依赖一个ClassName的字符串。可以随时更改,而不用依赖具体的包名、对象名和对象中的构造方法。 + +![](image/2022-10-08-12-04-49.png) + +```xml + +``` +```java +class UserDao{ + add(){ + + } +} +class UserFactory{ + public static UserDao getDao(){ + String classValue = class属性值;//XML解析 + Class classzz = Class.forName(classValue)//通过反射创建对象。 + return (UserDao)clazz.newInstance(); + } +} + +class UserService{ + execute(){ + UserDao dao = UserFactory.getDao(); + dao.add(); + } +} +``` +## 2 IOC接口BeanFactory&ApplicationContext + +IOC思想是基于IOC容器完成的,IOC容器底层就是对象工厂(工厂通过xml文件解析类名,通过反射机制创建对象实例)。 + +### 实现方法 +Spring提供了IOC容器实现的两种方式。耗时耗资源的操作,尽量在初始化的时候完成,所以ApplicationContext这个接口更常使用。 + +* BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供给开发人员使用。 + * 加载配置文件的时候,不会创建对象。在获取(使用)对象的时候,才去创建对象。 +* ApplicationContext。BeanFactory接口的子接口,提供了更多更强大的功能,一般由开发人员进行使用。 + * 加载配置文件的时候就会把配置文件对象进行创建。 + +### BeanFactory +继承结构如下,有多种子接口和实现方法 +![](image/2022-10-08-14-18-55.png) + +### ApplicationContext + +继承结构如下 +![](image/2022-10-08-14-11-22.png) + +* FileSystemXmlApplicationContext,存储盘下的xml路径 +* ClassPathXmlApplicationContext,是src下的类路径 + +### IOC操作Bean + +* Spring创建对象——依赖倒置 +* Spring注入属性——依赖注入 + +主要两种方式 +* 基于XML的方式 +* 基于注解的方式 +## 3 IOCBean管理基于XML方式 + +### 基于XMl方式创建对象 +```xml + +id:对象唯一标识 +class:创建对象的类全路径,包类路径 +name:对象名称标识 +``` +* 在Spring给你配置文件中,使用bean标签,标签里添加对应属性。实现对象的创建 +* bean中有很多属性 +* 创建对象的时候,执行午餐构造函数。 + + +### 基于XML方式注入属性 +> DI依赖注入,就是注入属性。 + +* 原始的属性注入方法 + + +```java +/** + * Alipay.com Inc. + * Copyright (c) 2004-2022 All Rights Reserved. + */ +package com.ykl; + +/** + * @author yinkanglong + * @version : Book, v 0.1 2022-10-08 14:32 yinkanglong Exp $ + */ +public class Book { + private String name; + + //set方法注入 + public void setName(String name) { + this.name = name; + } + + //有参构造函数注入 + public Book(String name){ + this.name = name; + } + + public Book(){ + + } + + public static void main(String[] args) { + //使用set方法注入 + Book book = new Book(); + book.setName("123"); + + //使用有参构造函数注入 + Book book = new Book("abc"); + } +} +``` + + +* 第一种方法:使用set方法进行注入. + * 创建属性和属性对应的set方法。 + * 在Spring配置文件配置对象创建和属性注入。 + * 加载配置文件获取指定的对象。 + +```xml + + + + + + + + + + + + +``` + +```java + @Test + public void testBook(){ + +// 在创建对象的过程中就完成了属性的注入 + ApplicationContext context = new ClassPathXmlApplicationContext("bean01.xml"); + + Book book = context.getBean("book", Book.class); + + System.out.println(book.getName()); + + } +``` +* 第二种方法:使用有参构造函数进行注入 + * 创建类和属性,创建对应属性的有参构造方法。 +```java +/** + * Alipay.com Inc. + * Copyright (c) 2004-2022 All Rights Reserved. + */ +package com.ykl; + +/** + * @author yinkanglong + * @version : Order, v 0.1 2022-10-08 14:47 yinkanglong Exp $ + */ +public class Order { + private String oname; + private String address; + + public Order(String oname, String address) { + this.oname = oname; + this.address = address; + } +} +``` + * 通过有参构造方法创建对象进行依赖注入 +```xml + + + + +constructor-arg +name 名称 +value 值 +index 参数列表 +``` +* p名称空间注入方法 + * 用于简化xml的配置方法。在beans里添加p命名空间 + * 在bean标签里添加键值对。 +```xml + + + + +``` + +### xml注入其他类型的属性 +* 字面值,空值null +```xml + + + +``` +* 字面值,包含特殊符号 + * 把特殊符号进行转义 + +```xml + + +``` + * 把特殊符号写到CDATA中 +```xml + + +>]]> + + +``` +* 级联Bean——外部bean注入 + * 创建service和dao类 + * 在配置文件中配置注入操作 + * 测试类,测试是否注入成功 + +```java + +public class UserService { + + public UserDao getUserDao() { + return userDao; + } + + public void setUserDao(UserDao userDao) { + this.userDao = userDao; + } + + UserDao userDao; + + + public void add(){ + System.out.println("service add ..."); + + userDao.update(); + } +} +public class UserDaoImpl implements UserDao{ + + @Override + public void update(){ + System.out.println("dao update ..."); + } +} +``` +```xml + + + + + + + + + + + + +``` +```java +public class Test02 { + @Test + public void testAdd(){ +// 加载spring的配置文件 + ApplicationContext context = new ClassPathXmlApplicationContext("bean02.xml"); + + // 获取配置创建的对象 + UserService user = context.getBean("userService", UserService.class); + user.add(); + } +} +``` +* 级联Bean——内部bean + * 一对多关系:部门和员工。 + * 在实体类之间表示一对多的关系。 +```xml + + + + + + + + + + + +``` +> 数据库3BNF范式的要求: +> 一对多的关系,需要在多的一方添加外键,指向一。 +> 多对多的关系,需要拆分出关系类。任意一方和关系类都是一对多的关系。 + +* 级联赋值 + * 外部bean注入 + * 给外部bean的属性赋值 +``` + + + + + + + + + + + + + +``` + +### xml注入集合属性 +* 注入数组类型属性、List集合类型属性、Map集合类型属性 + 1. 创建集合类型的属性。 + 2. 注入集合类型的属性 + +```java +/** + * Alipay.com Inc. + * Copyright (c) 2004-2022 All Rights Reserved. + */ +package com.ykl.collectiontype; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author yinkanglong + * @version : Student, v 0.1 2022-10-08 16:01 yinkanglong Exp $ + */ +public class Student { + private String[] courses; + + private List list; + + private Map maps; + + private Set sets; + + public Student() { + } + + public void setList(List list) { + this.list = list; + } + + public void setMaps(Map maps) { + this.maps = maps; + } + + public void setSets(Set sets) { + this.sets = sets; + } + + public void setCourses(String[] courses) { + this.courses = courses; + } + + @Override + public String toString() { + return "Student{" + + "courses=" + Arrays.toString(courses) + + ", list=" + list + + ", maps=" + maps + + ", sets=" + sets + + '}'; + } +} +``` +```xml + + + + java + c + + + + + + zhangsan + xiaosan + + + + + + + + + + + + + msyql + redis + + + + +``` +* XML注入集合中对象类型 +```xml + + ...... + + + + + + + + + + + + + + + + + + +``` +* 使用新的命名空间进行注入 + * 在spring配置文件中引入util命名空间 + * 提取list集合类型的属性注入。 +```xml + + + + + zhangsan + xiaosan + + + + + + + +``` + +### 普通bean和工厂bean +* 普通bean:在配置文件中定义的Bean类型就是返回类型 +* 工厂bean:在配置文件中定义的Bean类型和返回类型可以不一样。 + + +工厂bean的实现方法 +* 创建类,让这个类作为工厂bean。实现接口factoryBean +* 实现接口里面的方法,在实现的方法中定义返回bean类型。 + + + + + +## 4 IOCBean管理基于注解方式 + + + +> 包的两种作用 +> * 水平分层——层次。位于不同的层次,应该在包的某个字段体现出来。service层、view层、dao层等。 +> * 垂直分割——功能。同一个功能在不同层次有不同力度的对应和实现,应该在包类的某个字段体现出来。包括book功能,sell功能等。 +> 一个包类路径的命名(功能结构或者说项目架构),应该是水平分层和垂直分割方法的交替。 \ No newline at end of file diff --git a/Spring/Spring5/02 AOP.md b/Spring/Spring5/02 AOP.md new file mode 100644 index 00000000..de9dd5c6 --- /dev/null +++ b/Spring/Spring5/02 AOP.md @@ -0,0 +1,9 @@ +## 1 AOP基本概念 + + + + +## 2 AOP底层原理 + + +## 3 AOP操作 \ No newline at end of file diff --git a/Spring/Springframework/SpringFramework简介.md b/Spring/Spring5/03 ORM Data JDBC.md similarity index 100% rename from Spring/Springframework/SpringFramework简介.md rename to Spring/Spring5/03 ORM Data JDBC.md diff --git a/Spring/Spring5/04 事务.md b/Spring/Spring5/04 事务.md new file mode 100644 index 00000000..e69de29b diff --git a/Spring/Spring5/05 Webflux.md b/Spring/Spring5/05 Webflux.md new file mode 100644 index 00000000..e69de29b diff --git a/Spring/Spring5/image/2022-10-08-11-53-59.png b/Spring/Spring5/image/2022-10-08-11-53-59.png new file mode 100644 index 00000000..9b45b4e9 Binary files /dev/null and b/Spring/Spring5/image/2022-10-08-11-53-59.png differ diff --git a/Spring/Spring5/image/2022-10-08-11-54-46.png b/Spring/Spring5/image/2022-10-08-11-54-46.png new file mode 100644 index 00000000..d7af1558 Binary files /dev/null and b/Spring/Spring5/image/2022-10-08-11-54-46.png differ diff --git a/Spring/Spring5/image/2022-10-08-12-04-49.png b/Spring/Spring5/image/2022-10-08-12-04-49.png new file mode 100644 index 00000000..b00618ce Binary files /dev/null and b/Spring/Spring5/image/2022-10-08-12-04-49.png differ diff --git a/Spring/Spring5/image/2022-10-08-14-11-22.png b/Spring/Spring5/image/2022-10-08-14-11-22.png new file mode 100644 index 00000000..ccf0eab6 Binary files /dev/null and b/Spring/Spring5/image/2022-10-08-14-11-22.png differ diff --git a/Spring/Spring5/image/2022-10-08-14-18-55.png b/Spring/Spring5/image/2022-10-08-14-18-55.png new file mode 100644 index 00000000..9ede7efe Binary files /dev/null and b/Spring/Spring5/image/2022-10-08-14-18-55.png differ diff --git a/Spring/Spring5官方文档.pdf b/Spring/Spring5官方文档.pdf new file mode 100644 index 00000000..11c1e7e9 Binary files /dev/null and b/Spring/Spring5官方文档.pdf differ diff --git a/docker/3 常用命令.md b/docker/3 常用命令.md index 5ff0315c..6a22f409 100644 --- a/docker/3 常用命令.md +++ b/docker/3 常用命令.md @@ -247,7 +247,7 @@ exit ### docker rm删除容器 -* +* 删除容器 ``` docker rm container_id 删除指定的容器,不能删除正在运行的容器。 -f 可以删除正在运行的容器 @@ -565,7 +565,7 @@ docker attach containerid ### docker cp从容器内拷贝到主机上 -* docker cp id +* id * 进入容器, * 创建文件 * 拷贝文件 diff --git a/docker/5 容器数据卷.md b/docker/5 容器数据卷.md index 6f8db7d2..79b60c39 100644 --- a/docker/5 容器数据卷.md +++ b/docker/5 容器数据卷.md @@ -115,6 +115,82 @@ docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx ## 3 DockerFile构建docker镜像文件 +Dockerfile 用来构建docker镜像的构建文件!就是命令脚本。 + +* 通过这个脚本可以生成镜像,镜像就是一层一层的。脚本是一个个的命令,每个命令是一层。 + +```shell +# 创建一个dockerfile文件,名字尽量为dockerfile +# 文件中的恩荣,指令大写,参数 +➜ test_volume cat dockerfile1 +FROM centos + +VOLUME ["volume01","volume02"] + +CMD echo "--end--" +CMD /bin/bashs +# 这里的每个命令,都是镜像中的一层。 +``` +![](image/2022-10-08-21-55-08.png) + +* 运行并查看我们自己创建的镜像。可以看到挂载的卷。这是一个匿名挂载,只包含容器内的文件路径。 + +![](image/2022-10-08-22-01-46.png) + +![](image/2022-10-08-21-57-57.png) +![](image/2022-10-08-22-02-04.png) +* 使用docker inspect能够查看卷挂载的路径。 + +![](image/2022-10-08-22-00-28.png) + +* 最后测试一下文件是否同步。 +![](image/2022-10-08-22-17-15.png) +* mac下无法访问/var/lib/docker目录。解决方案 + +``` +# 拉取镜像并运行进入VM,然后就可以找到/var/lib/docker +docker run -it --rm --privileged --pid=host justincormack/nsenter1 +/ # hostname +docker-desktop +/ # uname -a +Linux docker-desktop 5.10.47-linuxkit #1 SMP Sat Jul 3 21:51:47 UTC 2021 x86_64 Linux +/ # cd /var/lib/docker/containers/ +/var/lib/docker/containers # ls + +469a5c56d4dcfa1f10228e4a10da5fdef2576d046bf83b99066ded54aeb93f90 +a2158f98ccbfe057f8bf4d9c0f3a34b8408ed1bdb22ae72ea90cb781df6af166 +b0bca090076ae5e683469b95ef7279b43ae941fb7ad7732ce233057a175225d8 +d211d5e9bd3e094b37699e9163825c8941e6eff03c036fd3ffc774364db99493 +d4df5c6e11115695fbc4d61cd018ab8a59006a6b9373ba837bf7003df8fd14bb + +/var/lib/docker/containers # ls ../volumes/ + +0bc95ec18e21b6fe455581b48fc8784159e5b3de52037ae0b01dc30a978b3ed7 +45f7d5b3f9a819b8035b088d4bfea306f1a54c3c5257cdc0f733d24691be8dcd +54c34557ba83af6f142a0916c7eddc36acdb1652eb9b5123ff5c40f6e1e7e4e8 +79d875e4bb162d15417d9a1768b0042c2d08203450dcb904e69f01816927a07a +b2d98f27082a7864f83aaf667858f3fad39a02819cd4e00e61279a7d30589159 +backingFsBlockDev +c4a9d80b6636e6dede8c637210dad9abf1b476a63f38848c767802de735a51dc +db8dcda5d651ec433d83cfeee5dd6d4be198a13d9fe5c103410060addab014ac +metadata.db +nginxconfig +``` -## 4 \ No newline at end of file +## 4 数据卷容器 + +### 共享原理 + +![](image/2022-10-08-22-27-25.png) + + +### 数据共享 + +* 通过vulumes-from 参数实现数据共享 + +![](image/2022-10-08-23-06-28.png) + +```shell +docker run -it --name docker01 --volumes-from a04eb38b1a38 yinkanglong/hello +``` \ No newline at end of file diff --git a/docker/image/2022-10-08-21-55-08.png b/docker/image/2022-10-08-21-55-08.png new file mode 100644 index 00000000..35f9ab4d Binary files /dev/null and b/docker/image/2022-10-08-21-55-08.png differ diff --git a/docker/image/2022-10-08-21-57-57.png b/docker/image/2022-10-08-21-57-57.png new file mode 100644 index 00000000..a6373d51 Binary files /dev/null and b/docker/image/2022-10-08-21-57-57.png differ diff --git a/docker/image/2022-10-08-22-00-28.png b/docker/image/2022-10-08-22-00-28.png new file mode 100644 index 00000000..9d465e3c Binary files /dev/null and b/docker/image/2022-10-08-22-00-28.png differ diff --git a/docker/image/2022-10-08-22-01-46.png b/docker/image/2022-10-08-22-01-46.png new file mode 100644 index 00000000..9d465e3c Binary files /dev/null and b/docker/image/2022-10-08-22-01-46.png differ diff --git a/docker/image/2022-10-08-22-02-04.png b/docker/image/2022-10-08-22-02-04.png new file mode 100644 index 00000000..ffb3da92 Binary files /dev/null and b/docker/image/2022-10-08-22-02-04.png differ diff --git a/docker/image/2022-10-08-22-17-15.png b/docker/image/2022-10-08-22-17-15.png new file mode 100644 index 00000000..12f74d00 Binary files /dev/null and b/docker/image/2022-10-08-22-17-15.png differ diff --git a/docker/image/2022-10-08-22-27-25.png b/docker/image/2022-10-08-22-27-25.png new file mode 100644 index 00000000..417f81b6 Binary files /dev/null and b/docker/image/2022-10-08-22-27-25.png differ diff --git a/docker/image/2022-10-08-23-06-14.png b/docker/image/2022-10-08-23-06-14.png new file mode 100644 index 00000000..2fc861dc Binary files /dev/null and b/docker/image/2022-10-08-23-06-14.png differ diff --git a/docker/image/2022-10-08-23-06-28.png b/docker/image/2022-10-08-23-06-28.png new file mode 100644 index 00000000..2fc861dc Binary files /dev/null and b/docker/image/2022-10-08-23-06-28.png differ