颜群Spring进阶
Spring进阶1. Spring注解开发1.1 SpringIOC容器两种注入方式
xml配置文件:applicationContext.xml(这个xml配置文件就是IOC容器)
注解:带有@Configuration注解的类(这个配置类就是IOC容器)
1234567891011121314151617IOC容器的作用 存Bean 取Bean # xml配置文件存bean: <bean id class>取bean:ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");context.getBean();# 注解方式取bean ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class) ;context.getBean();# 取所有BeanString[] beanDefinitionNames = conte ...
SpringSecurityOuth2.0(上)
5.分布式系统认证方案5.1什么是分布式系统随着软件环境和需求的变化 ,软件的架构由单体结构演变为分布式架构,具有分布式架构的系统叫分布式系统,分 布式系统的运行通常依赖网络,它将单体结构的系统分为若干服务,服务之间通过网络交互来完成用户的业务处 理,当前流行的微服务架构就是分布式系统架构
分布式系统具体如下基本特点:
1、分布性:每个部分都可以独立部署,服务之间交互通过网络进行通信,比如:订单服务、商品服务。
2、伸缩性:每个部分都可以集群方式部署,并可针对部分结点进行硬件及软件扩容,具有一定的伸缩能力。
3、共享性:每个部分都可以作为共享资源对外提供服务,多个部分可能有操作共享资源的情况。
4、开放性:每个部分根据需求都可以对外发布共享资源的访问接口,并可允许第三方系统访问。
5.2 分布式认证需求分布式系统的每个服务都会有认证、授权的需求,如果每个服务都实现一套认证授权逻辑会非常冗余,考虑分布式 系统共享性的特点,需要由独立的认证服务处理系统认证授权的请求;考虑分布式系统开放性的特点,不仅对系统 内部服务提供认证,对第三方系统也要提供认证。分布式认证的需求总结如下:
统一认证 ...
SpringSecurityOuth2.0(上)
Spring Security OAuth2.0认证授权1.基本概念1.1.什么是认证 进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证 相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码 登录微信的过程就是认证。
系统为什么要认证?
认证是为了保护系统的隐私数据与资源,用户的身份合法方可访问该系统的资源。
认证 :用户认证就是判断一个用户的身份是否合法的过程,用户去访问系统资源时系统要求验证用户的身份信 息,身份合法方可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登录,二维码登录,手 机短信登录,指纹认证等方式。
1.2 什么是会话 用户认证通过后,为了避免用户的每次操作都进行认证可将用户的信息保证在会话中。会话就是系统为了保持当前 用户的登录状态所提供的机制,常见的有基于session方式、基于token方式等。
基于session的认证方式如下图:
它的交互流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前会话)中,发给客 ...
9.异常、隐式转换和泛型
第 9 章 异常语法处理上和 Java 类似,但是又不尽相同。
9.1 Java 异常处理12345678910111213141516public class ExceptionDemo { public static void main(String[] args) { try { int a = 10; int b = 0; int c = a / b; }catch (ArithmeticException e){ // catch 时,需要将范围小的写到前面 e.printStackTrace(); }catch (Exception e){ e.printStackTrace(); }finally { System.out.println("finally"); ...
8.模式匹配
第 8 章 模式匹配Scala 中的模式匹配类似于 Java 中的 switch 语法
12345678910111213int i = 10switch (i) { case 10 : System.out.println("10"); break; case 20 : System.out.println("20"); break; default : System.out.println("other number"); break;}
但是 scala 从语法中补充了更多的功能,所以更加强大。
8.1 基本语法模式匹配语法中,采用 match 关键字声明,每个分支采用 case 关键字进行声明,当需 要匹配时,会从第一个 case 分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹 配不成功,继续执行下一个分支进行判断。如果所有 case 都不匹配,那么会执行 case _分支, 类似于 Java 中 default 语句。
1) ...
7.集 合
第 7 章 集 合7.1 集合简介
Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自 Iterable 特质。
对于几乎所有的集合类,Scala 都同时提供了可变和不可变的版本,分别位于以下两 个包
不可变集合:scala.collection.immutable
可变集合: scala.collection.mutable
Scala 不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而 不会对原对象进行修改。类似于 java 中的 String 对象
可变集合,就是这个集合可以直接对原对象进行修改,而不会返回新的对象。类似 于 java 中 StringBuilder 对象
建议:在操作集合的时候,不可变用符号,可变用方法
7.1.1 不可变集合继承图
1)Set、Map 是 Java 中也有的集合
2)Seq 是 Java 没有的,我们发现 List 归属到 Seq 了,因此这里的 List 就和 Java 不是同一个 概念了
3)我们前面的 for 循环有一个 1 to 3,就是 IndexedSe ...
Linux安装Mysql
直接从网易开源镜像站下载镜像(可以用阿里,华为,清华大学等等许多)我随便选了一个
http://mirrors.163.com/mysql/Downloads/MySQL-5.7
下载之后上传到自己的服务器。或者直接1
1wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.32-1.el7.x86_64.rpm-bundle.tar
1 安装MySQL解压
1234567891011121314151617181920212223242526tar -xvf mysql-5.7.33-1.el7.x86_64.rpm-bundle.tar -C ./mysql-5.7.33mysql-community-embedded-devel-5.7.21-1.el7.x86_64.rpmmysql-community-minimal-debuginfo-5.7.21-1.el7.x86_64.rpmmysql-community-common-5.7.21-1.el7.x86_64.rpmmysql-comm ...
使用ShardingJdbc实现Mysql数据库主从复制
Mysql主从原理图
1. 创建两个Mysql实例Docker安装模拟MySQL集群(和本地安装没啥区别,我为了方便直接Docerk了)
1、下载mysql镜像
1docker pull mysql:5.7
2、创建Master实例并启动
12345678910111213docker run -p 3306:3306 --name mysql-master \-v /mydata/mysql/master/log:/var/log/mysql \-v /mydata/mysql/master/data:/var/lib/mysql \-v /mydata/mysql/master/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root \-d mysql:5.7 参数说明 -p 3306:3306:将容器的3306端口映射到主机的3306端口 -v /mydata/mysql/master/conf:/etc/mysql:将配置文件夹挂在到主机 -v /mydata/mysql/master/log:/var/log/mysql:将日志文件 ...
6.面向对象
第 6 章 面向对象Scala 的面向对象思想和 Java 的面向对象思想和概念是一致的。
Scala 中语法和 Java 不同,补充了更多的功能。
6.1 Scala 包6.1.1 包的命名1) 命名规则只能包含数字、字母、下划线、小圆点.,但不能用数字开头,也不要使用关键字。
2) 案例实操123demo.class.exec1 //错误,因为 class 关键字demo.12a //错误,数字开头
3) 命名规范123一般是小写字母+小圆点com.公司名.项目名.业务模块名
4) 案例实操123com.atguigu.oa.model com.atguigu.oa.controllercom.sohu.bank.order
6.1.2 包说明(包语句)1)说明Scala 有两种包的管理风格,一种方式和 Java 的包管理风格相同,每个源文件一个包(包名和源文件所在路径不要求必须一致),包名用“.”进行分隔以表示包的层级关系,如 com.atguigu.scala。另一种风格,通过嵌套的风格表示层级关系,如下
123456package com{ pack ...
5.函数式编程
第 5 章 函数式编程 面向对象和面向过程都属于同一类,命令式编程,函数式编程和命令式编程是整体完全不同的思路,命令式编程指的是不管你是拆解对象也好,还是直接按照步骤,按照过程把程序定义好。我们最终落脚点都是计算机具体执行程序的具体命令。函数式编程并不管计算机底层是怎么处理这件事,最关心的是我们整个数据的映射关系是什么样的。之前的命令式编程不管是面向对象还是面向过程,在做编程设计的时候,我们用到的那些语法,都是面向计算机硬件的抽象,比如在java或者C中,定义一个变量,这个变量是什么概念呢, int a =1; 并不是数学意义上的 a=1;因为数学上a=1;那接下来a和1完全就是等价的关系,而在计算机编程中a=1;之后还可以a=2;还可以在改变他的值,这在数学上是完全不可思议的事情。所以这个a并不是数学意义上的a,是一个变量,对应的是计算机底层的一块内存空间。所以a=1,对应的是计算机底层把一条数据写入到对应的内存空间的一条指令。所以后面再给a赋别的值就是更改内存空间中的数据。所以命令式编程的每一行代码,都能翻 ...




