05 2022 档案
摘要:Seate简介: Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务管理 官网地址:https://seata.io/zh-cn/ 1+3的组件模型: 1:分布式事务处理过程中唯一的ID(全局唯一id):不管涉及到多少个库,整体是一个事务id 2.三组件概
阅读全文
摘要:背景: 等关闭了程序,发现sentinel上配置的流控规则消失了..(配置的规则暂时是临时的) 如何将sentinel的规则持久化! 1.在pom文件中引入: 1.引入sentinel的包 <dependency> <groupId>com.alibaba.cloud</groupId> <arti
阅读全文
摘要:sentinel Hystrix resilience4j(外国人用) 隔离策略 信号量隔离(并发线程数限流) 线程池隔离/信号量隔离 信号量隔离 熔断降级策略 基于响应时间,异常比例,异常数 基于异常比率 基于异常比率,响应时间 实时统计实现 滑动窗口(LeapArray) 滑动窗口(基于Rxja
阅读全文
摘要:官网参考地址:https://github.com/alibaba/Sentinel/wiki 是什么: Spring Cloud Alibaba Sentinel 是面向于云原生微服务的高可用流控防护组件, 主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳
阅读全文
摘要:1.Nacos作为配置中心-基础配置 先搭建环境: 1.新建一个项目:cloudAilibaba-config-client 2.pom文件中引入:下面两个jar包最好捆绑导入 1:服务注册中心包 <dependency> <groupId>com.alibaba.cloud</groupId> <
阅读全文
摘要:CAP模式 1.C:是所有节点在同一时间看到的数据一致的。 2.A:A的定义就是所有请求都会收到响应。 3.P:分布式的高可用 何时选用何种模式: AP模式(只能支持注册临时实例): 一般来说,如果不需要存储服务级别的信息,月服务实例通过nacos-client注册,并能保持心跳上报,那么就选择AP
阅读全文
摘要:Nacos:前四个字母分别是Naming和Configuration的前两个字母,最后的s是Service 是什么呢? 一个更易于构建云原生的动态服务发现、配置管理和服务管理平台 Nacos就是注册中心+配置中心的结合 等价于 Nacos=Eureka(服务注册中心)+Config(服务配置中心)+
阅读全文
摘要:背景: 在微服务架构中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果, 一个前段请求都会形成一条复杂的分布式服务调用链路,链路一环出现高延时或者错误,都会引起整个请求最后的失败
阅读全文
摘要:可以做些什么: 1.服务限流降级:默认支持Servlet、Feign、RestTemplate、Double和RocketMq限流降级功能的接入, 可以在运行时通过控制台实时修改限流降规则,还支持查看限流降级Metrics架空 2.服务注册与发现:适配Spring Cloud服务注册与发现标准,默认
阅读全文
摘要:1.简介 消息驱动:屏蔽底层信息中间件的差异,降低切换成本,统一消息的编程模型 什么是SpringCloundStream 官方定义Spring Cloud Stream这一个构建消息驱动微服务的框架 应用程序通过inputs或者outputs域Spring Cloud Stream中的binder
阅读全文
摘要:Bus支持两种消息代理:RabbitMQ和Kafka 什么是总线 在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有的微服务实例都连接上了, 由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。 在总线上的各个实例,都可以方便的广播一些需要让其他连
阅读全文
摘要:微服务意味着将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务 由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的 springcloud 提供了ConifgServer来解决这个问题,我们每个微服务都自己带着一个appl
阅读全文
摘要:zuul分为两个版本,zuul1已经提更,zuul2还没开发好! 重点学习gateway! cloud全家桶中有个很重要的组件就是网管,在1.x版本中采用的时Zuul网关 但在2.x版本中,zuul的升级一致跳票,SpringCloud最后自己研发了一个网关代替Zuul 这就是Spring Clou
阅读全文
摘要:分布式系统面临的问题: 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将会不可避免的出错 服务雪崩 多个微服务之间调用的时候,假设A服务调用B服务和C服务,B服务和C服务又调用其他的微服务,这就是所谓的"扇出"(调用像折扇一样铺开)。 如果扇出的链路上的某个微服务响应时间过长
阅读全文
摘要:类比保险丝达到最大访问后,直接拒绝访问,拉闸限电,然后调用服务降级方法,返回友好提示! 服务降级 >进而熔断 >恢复调用链路 熔断机制概述: 熔断机制就是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用,或者想响应时间过长时 会进行服务降级,进而熔断该节点的微服务调用,快速返回
阅读全文
摘要:OpenFeign是什么? 1.Feign是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可 2.Feign旨在使编写Java Http客户端变得更容易。 3.前面在使用Ribbon+RestTemplate时,利用RestTemplate对h
阅读全文
摘要:spring cloud ribbon是基于NetflixRibbon实现的一套客户端(注意是客户端)负载均衡工具 LB负载均衡(Load Balance)是什么 简单的说就是将用户的请求平摊到多个服务器上,从而达到系统的HA(高可用) 常见的负载均衡有软件Nginx,LXS,硬件F5等 Ribbo
阅读全文
摘要:组件命 语言 CAP 服务健康检查 对外暴露接口 springcloid集成 Eureka java AP 可配支持 HTTP 已集成 Consul Go CP 支持 HTTP/DNS 已集成 zookeeper java CP 支持 客户端 已集成 CAP最多只能同时满足两个 CAP理论核心是:一
阅读全文
摘要:1.Consul简介 Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。 Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。 2.consul官网:https:
阅读全文
摘要:新建cloud-provider-payment8004 修改pom文件,加上以下依赖 <dependencies> <!-- SpringBoot整合Web组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifa
阅读全文
摘要:如何获取eureka的各项微服务信息? 可以在eureka的任何客户端代码中,控制层: 1.控制层新增方法 @GetMapping("/getDiscovery") public Object getDiscovery(){ //重点1:获取eureka的微服务名称 List<String> ser
阅读全文
摘要:Eureka包含了两个组件:Eureka Server和Eureka client 1.Eureka Server提供服务注册服务: 各个微服务节点铜鼓配置,启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中叫存储所有可用的服务节点的信息,服务节点的信息可以
阅读全文
摘要:创建项目成功后: 1.先更改maven的各项配置 2.配置各文件编码格式 3.热部署 3.1导入包: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifact
阅读全文
摘要:1.先创建一个父项目 1.父项目的作品是指定子项目相同依赖的版本,和springboot的版本仲裁功能类似 创建一个maven工程,删除掉里面的src等目录,只留下一个pom文件 pom文件解析: <project xmlns="http://maven.apache.org/POM/4.0.0"
阅读全文
摘要:<!--同一管理jar包的版本--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source>
阅读全文
摘要:1.方法引用:若lamada体中的函数体已经有方法实现了,我们可以使用"方法引用" 可以理解为方法引用为lamada表达式的另外一种表示 主要有三种语法结构: 1.1 对象::示例方法名 1.2 类::静态方法名 1.3 类::示例方法名 1.1对象::示例方法名 案例: 1.直接使用简单的核心函数
阅读全文
摘要:函数式接口:只有一个方法的接口称之为函数式接口 lambda表达式的基础语法: java8引入一个新的操作符"->",该操作符称之为lambda操作符 箭头将lambda表达式分割成两部分 左侧:lambda表达式的参数列表 右侧:lambda表达式需要实现的功能,即lambda体 语法1:无参数,
阅读全文
摘要:java8的四大核心函数式接口 1.Consumer<T> : 消费型接口 void accept(T t); 2.Supplier<T> :供给型接口 T get(); 3.Function<T,R> R apply(T t); 4.Predicate<T> boolean test(T t);
阅读全文
摘要:lambda表达式是一个匿名函数,我们可以将lambda表达式理解为一段可以传递的代码(将代码像数据一样传递) 可以写出更为简洁的代码 场景描述: 创建一个对象集合,删选出符合要求的对象(1.删选出工资大于8000的 2.删除出年龄大于18的) 对象集合如下: List<Employee> empl
阅读全文
摘要:卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但是不属于联合文件系统,因此能够绕过Union File System提供的一些用于持续存储或共享文件的特性 卷的设计目的就是数据持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷 特点: 1.数据
阅读全文
摘要:1.从阿里云拉去镜像 [root@wmd03 ~]# docker pull mysql:5.6 2. 查看拉取到的镜像 [root@wmd03 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest e1d7dc973
阅读全文
摘要:查看镜像 [root@wmd03 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest f796d3d2c195 3 weeks ago 647MB centos latest 0d120b6ccaa8 2 mont
阅读全文
摘要:1.版本 docker verison 2.docker常用信息 docker info 3.列出本地的镜像 [root@wmd03 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1a
阅读全文
摘要:前提条件: docker运行在centios7上,要求系统64位,系统内行人版本在3.10以上 docker运行在centios6.5或者更高的版本,要求系统为64为,系统内核版本为2.6.32-431或者更高的版本 查看自己的系统内核: 6.5版本:命令:uname -r 7.0版本:cat /e
阅读全文
摘要:简介: Docker是一个开源的应用器引擎 Docker主机(host):安装了Docker程序的机器(Docker直接安装在操作系统上) Docker(客户端):连接docker主机进行操作 docker仓库(Registry):用来保存各种打包好的软件镜像 docker镜像(Images):软件
阅读全文
摘要:https://blog.csdn.net/liupeifeng3514/article/details/79857060 https://www.cnblogs.com/chenjfblog/p/8715580.html https://blog.csdn.net/hhhzua/article/d
阅读全文
摘要:高可用示意图如下: NGINX主从备份 NGINX实现主从备份目前主流方案是Keepalived+Nginx实现双机热备。 Keepalived介绍: Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、
阅读全文
摘要:1.配置反向代理 解释:当浏览器输入:http://wmd02/getPerson/10007可以访问到真正的服务端 1.在客户端的host文件中配置域名解析:即当浏览器输入wmd02时,会访问到192.168.2.129服务器 192.168.2.129 wmd02 2.配置nginx服务器:上述
阅读全文
摘要:1.Nginx简介: Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好 Nginx专为性能优化而开发,性能是其最重要的考量,实现上非
阅读全文
摘要:一、缓存穿透 1、概念 缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。
阅读全文
摘要:哨兵模式前奏: 有两种主从模式: 1. 2.层层链路(必须手动执行) 哨兵模式(主节点宕机后,自动推选出主节点) 哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个单独的进程,作为进程,他会独立运行。其原理是 哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis
阅读全文
摘要:概念: 主从复制,是指将一台Reedis服务器的数据,复制到其他的redis服务器。前者成为主节点(master/leader),后者成为从节点(slave/follower); 数据的复制是单向的(),只能从主节点到从和节点。 Master以写为主,slave以读为主 默认情况下:每天reids服
阅读全文
摘要:AOF(append only file) 原理:是将我们执行的命令全部记录下来,恢复数据的时候,只需重新执行一遍即可 以日志的形式记录每一个写操作,将redis执行过的所有命令都记录下来(读操作不记录),只需追加文件但不可以更写文件 redis启动之初会读取文件重新构建数据,换言之,redis重启
阅读全文
摘要:reids的持久化是重点 reids是内存数据库,如果不讲内存中的数据保存到磁盘上,那么服务一旦出了问题,服务器中的数据库状态也会消失,所以redis提供了持久化! RDB 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照中文件直接读到内存中 Re
阅读全文
摘要:1.INCLUDES模块(redis.conf可以引入其他的配置文件共同起作用) # include /path/to/local.conf # include /path/to/other.conf 2.NETWORK(网络配置) #绑定的ip bind 127.0.0.1 #端口 port 63
阅读全文
摘要:1.集成springdata中的redis模块 2.说明 springboot2.x之后,原底层操作redis使用的是jedis,被替换成了lettuce 为什么呢? jedis:采用的是直连,多个线程操作的话,是不安全的,如果想要避免不安全,使用jedis pool连接池!其模式更像BIO模式 l
阅读全文
摘要:jedis是redis推荐的java连接工具!使用java操作redis中间件! 使用api和方法名相同 需要导入的包: <dependencies> <!--下载jedis的包--> <dependency> <groupId>redis.clients</groupId> <artifactId
阅读全文
摘要:1.悲观锁:认为什么时候都会出问题,做什么操作都会加锁 2.乐观锁:很乐观,认为什么时候都不会出问题,更新数据时去判断一下,再此期间是否有人更改了这个数据! MULTI(开启事务)/DISCARD(放弃事务) 使用watch 监视 使用案例1:模拟100块钱花去20块钱 127.0.0.1:6379
阅读全文
摘要:redis事务本质:一组命令一起执行!一个事务中的所有命令都会被序列化,在被事务执行的过程中,会被顺序执行! 一次性,顺序性,排他性! 1.redis单条命令是保证原子性的,但是事务是不保证原子性的(redis事务没有隔离级别的概念) redis事务的步骤: 1.开启事务(multi) 2.命令入队
阅读全文
摘要:1.geospatial:地理位置 redis得geo在3.2版本后已经推出 2.Hyperloglog:专业做网站计数的或页面统计的(允许一定的错误) redis2.8.9推出了该数据结构 reid Hyperloglog基数统计的算法 优点:占用的内存是固定,2^64不通元素的技术,只需要占用1
阅读全文
摘要:参考地址:https://www.cnblogs.com/hunternet/tag/Redis/ 五大基本的数据类型: 1.Striing类型 1.String类型 1.追加内容 127.0.0.1:6379> keys * 1) "name" 127.0.0.1:6379> get name "
阅读全文
摘要:reids默认有16个数据库,且默认使用的是第1个 redis.conf配置文件中如下 docker进入交互,执行客户端命令 root@cd8a28bf1a1c:/# redis-cli 127.0.0.1:6379> dbsize(查询当前数据库大小) (integer) 5 127.0.0.1:
阅读全文
摘要:1.拉去redis [root@wmd01 bin]# docker pull redis 2.创建文件夹: mkdir -p /usr/local/docker/redis/config 将自己的redis.conf文件放入(此处必须放入自己的redis.conf文件,并且必须是提前放入) 3.启
阅读全文
摘要:radis下载路径:http://download.redis.io/releases/ 1.上传redis 2.解压:tar -zxvf 3.配置redis.conf参数 目录:进入redis得安装包 配置参数详解参考 https://www.cnblogs.com/fansik/p/649793
阅读全文
摘要:redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步 免费和开源!是当前最热门的NoSql技术之一!也被人们称之为结构化数据库! Redis能干嘛? 1.内存存储,持久化,内存中是断电即失的,所以说持久化很重要(rdb,a
阅读全文
摘要:关系型数据库和非关系型数据库的区别 一 关系型数据库有 我们只需要 记住常用的几个:mysql /oracle/sql server/sqlite 几个即可 我还有一篇文章 介绍了 关系型数据库和非关系型数据的数据结构 –红黑树-二叉树-B树 1.首先了解一下 什么是关系型数据库? 关系型数据库最典
阅读全文
摘要:可以干什么? 1.读写分离 2.数据分片 2.1垂直拆分 2.2水平拆分 2.3垂直+水平拆分 3.多数据源整合 原理: 拦截
阅读全文
摘要:1.每个slave只有一个master 2.每个slave只能有一个唯一的服务器id 3.每个master可以有多个salve 问题: 延时
阅读全文
摘要:按照数据操作类型可以分为: 1.读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会相互影响 2.写锁(排他锁):当前操作没有完成前,他会阻断其他写锁和读锁 按照对数据操作的粒度来分: 1.表锁(偏读):偏向MyISAM存储引擎,开销小,加锁快;无死锁锁定粒度大,发生锁冲突的概率最高,并发度
阅读全文
摘要:索引失效 1.最佳左前缀原则: 如果索引了多列,要遵守最佳左前缀法则,指的是查询从索引的最左列开始,并且不跳过索引中的列. 如给表创建复合索引:create index on 表名(name,age,poit) 1.不会使用索引,具体情况参考:https://www.cnblogs.com/rjzh
阅读全文
摘要:sql执行时间长,性能下降的原因推测: 1.查询语句写的不好 2.索引失效 索引分为: 1.单值索引 create index idx_user_name on user(name) 2.多值索引 create index idx_user_nameEmail on user(name,email)
阅读全文
摘要:查看所有的存储引擎:发现默认使用的是InnoDB SHOW ENGINES; MyISAM和InnoDB数据库引擎的区别
阅读全文
摘要:1.mysql架构介绍 1.连接层: 最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似tcp/ip的通信 主要是完成一些类似于连接处理、授权认证,及相关的安全方案。在盖层上引入了线程池的概念,为通过认证安全接入客户端提供线程。同样在该层可以实现 基于ssh的
阅读全文
摘要:1.if函数: if(表达式1,表达式2,表达式3) 执行顺序: 如果表达式1成立,则返回表达式2的值,否则返回表达式3的值 应用: 任何地方 2.case结构: 情况1:类似于java中的switch语句,一般用于实现等值判断 语法: CASE 变量|表达式|字段 WHEN 要判断的值 THEN
阅读全文
摘要:存储过程和函数:类似于java中的方法 好处: 1 提高代码的重用性 2 简化操作 存储过程:一组雨欣编译好的sql语句集合,理解成批处理语句 1 提高代码的重用性 2 简化操作 3 减少编译次数并且减少了和数据库服务器的连接次数,提高效率 语法: 1.创建语法 CREATE PROCEDURE 存
阅读全文
摘要:函数:一组雨欣编译好的sql语句集合,理解成批处理语句 1 提高代码的重用性 2 简化操作 3 减少编译次数并且减少了和数据库服务器的连接次数,提高效率 和存储过程的区别: 存储过程:可以有0个返回,也可以有多个返回。适合做批量的插入、批量的更新 函数:只能有一个返回,适合做处理数据后返回一个结果
阅读全文
摘要:变量: 1.系统变量 1.1全局变量: 作用域:服务器每次启动将会为所有的全局变量赋初始值,针对所有的会话(连接)有效,但不能跨重启(即数据库重启后,又会恢复到默认值) 1.2会话变量 作用域:仅仅针对于当前会话(连接)有效 2.自定义变量:作用域:针对于当前会话(连接)有效。同于会话变量的作用域
阅读全文
摘要:在java官方文档中描述:ThreadLocal类是提供线程内部的局部变量,这种变量在多线程环境下访问(通过get/set访问)时能保证各个线程的变量相对独立于 其他线程内的变量,ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文 我们可以得知Thre
阅读全文
摘要:1.CPU [root@bogon ~]# top top - 22:14:51 up 7 days, 12:38, 1 user, load average: 0.60, 0.29, 0.19 Tasks: 193 total, 1 running, 192 sleeping, 0 stopped
阅读全文
摘要:产生死锁的原因: 1.系统资源不足 2.进程进行推进的顺序不合适 3.资源分配不当 按照图示写个死锁: class HoldLockThread implements Runnable{ //定义两个对象,根据这两个对象来加锁 private String lockA; private String
阅读全文
摘要:为什么使用线程池优势? 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过最大数量,超出部分将排队等待。 其他线程执行完毕,再从队列中取出任务来执行 主要特点: 1.线程复用 2.控制最大并发数。 3.管理线程 优点: 1.降低资源消耗
阅读全文
摘要:Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。 特点: 1.Callable 可以抛出异常 2.Callable 可以返回结果 3.Callable 调用get方法时会阻塞 4.C
阅读全文
摘要:题目:synchronized和Lock有什么区别?用新的lock有什么好处?举例说说 1.原子构成: synchronized是关键字属于JVM层面 monitorenter(底层通过monitor对象来完成。其实wait/notify等方法也依赖于monitor对象,只能在同步块或者方法中才能调
阅读全文
摘要:.生产者和消费者的synchronized 版本以及虚假唤醒问题 先看一个场景: 一个卖面的面馆,有一个做面的厨师和一个吃面的食客,需要保证,厨师做一碗面,食客吃一碗面, 不能一次性多做几碗面,更不能没有面的时候吃面; 按照上述操作,进行十轮做面吃面的操作。 样例代码: public class J
阅读全文
摘要:发现队列Queue和List/Set平级 阻塞队列的四组API: 方式 抛出异常 有返回值,不抛出异常 阻塞 等待 超时等待 添加 add offer() put() offer 移除 remove poll() take() poll 检测队首元素 element peek() 1.抛出异常api
阅读全文
摘要:1CountDownLatch(减法计数器) 1.CountDownLatch:减法记数器 有三个重要方法: 1.初始化,并确定计数器最大值 CountDownLatch countDownLatch = new CountDownLatch(6); 2.计数器数量-1 countDownLatch
阅读全文
摘要:1.公平锁和非公平锁 1.公平锁: 是值多个线程按照申请锁的顺序获取锁,类似排队打饭,先来后到 2.非公平锁: 是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获得锁,在高并发的情况下,有可能会造成优先级反转或者饥饿现象 上来直接尝试占有锁,如果尝试失败,再采用类
阅读全文
摘要:具体代码如下: @AllArgsConstructor @NoArgsConstructor @ToString @Data class Person { private int age; private String name; } public class TestTransferValue {
阅读全文
摘要:1.List集合在多线程下是不安全的 1.测试代码:创建30个线程同时操作一个资源list public class NotSafeDemo { public static void main(String[] args) { List<String> list=new ArrayList<>();
阅读全文
摘要:1.问题:gc垃圾回收算法和垃圾回收器的关系?分别是什么谈谈你的看法 gc算法(引用计数/复制/标清/标整)是内存回收的理论,垃圾回收器是算法的落地实现 目前为止没有完美的收集器出现,只是针对具体应用选择合适的收集器,进行分代收集 4种主要垃圾收集器 1.Serial:串行垃圾回收器 2.Paral
阅读全文
摘要:1.Volatitle关键字 volatitle是虚拟机提供的轻量级的同步机制,JMM是需要满足三个特性:可见性/原子性/禁止指令重排,但volatitle只能保证两个,不能保证原子性,所以其是轻量型的同步机制! 有三个特性: 1.保证可见性 2.不保证原子性 3.禁止指令重排 1.JMM(java
阅读全文
摘要:理解JVM中的几个内存模型 JVM的内存模型如下: 名词解释: Math math = new Math(); 1.堆:存放具体实例化后的对象内容:new Math() 2.栈:存放对应的引用:Math math存放的是Math对象在堆内存中的地址! 3.本地方法栈:存放的是线程内部的一个底层调用,
阅读全文
摘要:1.说⼀下ArrayList和LinkedList区别 1.具体区别 1.1. ⾸先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的 1.2. 由于底层数据结构不同,他们所适⽤的场景也不同,ArrayList更适合随机查找, LinkedLi
阅读全文
摘要:单例模式分为 1.饿汉式 2.懒汉式 基本模式:构造器私有,提供对应的静态方法去获取! 1.饿汉式样例: public class Hungry { //重点1:构造器私有,外部将无法创建该对象 private Hungry(){ } //重点2:自己直接创建一个该对象,引用变量被final修饰之后
阅读全文
摘要:Volatile是java虚拟机提供的轻量级的同步机制,特点 1.保证可见性 2.不保证原子性 3.禁止指令重排 什么是JMM: JAVA内存模型,不存在的东西,概念!约定! JMM关于同步的规定 1.线程解锁前,必须把共享变量的值刷新会主内存 2.线程加锁前,必须读取主内存的最新值到自己的工作内存
阅读全文
摘要:在jdk1.7后,并发执行任务!提高效率,大数据量! 思想:将大任务拆分成小任务! 特点: 工作窃取 工作窃取 这里维护的都是双端队列: 原理是:当B执行完毕后,可以从下面偷取A的去执行,以达到提高效率的目的!
阅读全文
摘要:/** * 链式编程的写法: * 如何用一行代码实现: * 1.ID必须是偶数 * 2.年龄必须大于23 * 3.用户名转为大写字母 * 4.用户名字母倒序 * 5.只输出一个用户 */ public class Test { public static void main(String[] arg
阅读全文
摘要:函数式接口:只有一个方法的接口 例如Runnable @FunctionalInterface public interface Runnable { void run(); } 简化编程模型,在新版本的框架底层大量使用 四大函数式接口: 1.Function接口:泛型设置方法参数类型和返回值类型
阅读全文
摘要:线程池重点: 1.三大方法 2.7大参数 3.4种拒绝策略 池化技术: 程序的运行本质是:占用系统的资源!优化资源的使用==>池化技术 线程池、连接池、内存池、对象池等等 创建销毁十分浪费资源 池化技术:事先准备好一些资源,有人要用,就拿来用,用完归还 线程池的好处: 1.降低资源的消耗和浪费 2.
阅读全文
摘要:发现队列Queue和List/Set平级! 阻塞队列的四组API: 方式 抛出异常 有返回值,不抛出异常 阻塞 等待 超时等待 添加 add offer() put() offer 移除 remove poll() take() poll 检测队首元素 element peek() 1.抛出异常ap
阅读全文
摘要:读写锁:操作一个资源,写只能一个线程,读可以多个线程 具体代码如下: public class ReadWriteLock_Demo { public static void main(String[] args) { //创建了六个读线程和六个写线程去操作缓存! Mycache mycache=n
阅读全文
摘要:1.List集合在多线程下是不安全的 1.测试代码:创建30个线程同时操作一个资源list public class NotSafeDemo { public static void main(String[] args) { List<String> list=new ArrayList<>();
阅读全文
摘要:1.lambda表达式的使用 1.lambda的使用: 只能用在函数式接口的地方,如Runable接口 //重点1:有FunctionalInterface的标签 @FunctionalInterface public interface Runnable { //重点2:接口中只有一个方法! pu
阅读全文
摘要:1.java默认有两个线程: 1.main线程 2.GC垃圾回收线程 2.java真的可以开启线程么? 答案是否定的,其实底层本地去调用是c++的方法,因为java是运行在虚拟机上的,无法操作硬件! 原理如下: public synchronized void start() { if (threa
阅读全文
摘要:简介 1.什么是缓存 1.存在内存中的临时数据 2.将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询, 从缓存中查询,从而提高查询效率,解决高并发系统性能问题 2.为什么使用缓存 减少和数据库的交互次数,减少系统开销,提高系统效率 3.什么样的数据使用
阅读全文
摘要:动态sql:根据不同的条件生成不同的sql语句,其本质是在sql层面,加入一些逻辑代码 1.if标签的使用:(重点:会执行所有的fi标签,并进行条件判断,满足的部分进行sql拼接) 1.1接口中的定义: public interface UserMapper { List<User> getUser
阅读全文
摘要:1.一对多处理 场景: 有两张表格宠物表pet和主人表person 宠物和人多对1的关系! 现需要查询出指定用户id的人和他下的所有宠物 1.person类的代码 //重点1:给宠物类起一个别名:wmd->用于更改类的别名 需要注意的是 该标签必须和下述配合使用(在mybatis的主配置文件中配置)
阅读全文
摘要:1.select 注解: 1.mybatis的主配置文件中的写法: <!--mybatis的数据库配置--> <configuration> <!--可以同时配置多个数据源,一个数据源等于一个environment--> <settings> <setting name="logImpl" valu
阅读全文
摘要:1.limit做分页 1.接口中的写法 public interface PersonMapper { ... List<Person> getPersonByLimit(@Param("startIndex") int startIndex,@Param("pageSize") int pageS
阅读全文
摘要:logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 这是setting中日志的设置: key为:logImpl value: 1.SLF4J 2.LOG4J 3.LOG4J2 4.JDK_LOGGING 5.COMMONS_LOGGING 6.STDOUT_LOGGING
阅读全文
摘要:问题描述:如果数据库查询出的字段名称和实体类的字段名称对应不上,会导致查询出的为空 解决办法 1.更改sql中的查询字段名称,起个别名如:(暴力直接,不推荐使用) select id,name as person_name,age,messeg from person 2.使用resultmap(推
阅读全文
摘要:理解我们之前讨论过的不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的 并发问题 并发问题的产生:获取到连接不关闭 1.SqlSessionFactoryBuilder 1.1一旦创建了SqlSessionFactory,就不再需要它了 1.2局部变量 2.SqlSessionFa
阅读全文
摘要:1.核心配置文件:mybatis-config.xml MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下: configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typ
阅读全文
摘要:1.多个参数是可以使用map接收 示例如下: 1.dao层结构 public interface UserDao { List<User> getUserByMap(Map<String,Object> map); } 2.mapper.xml中配置 <!--根据map查询--> 重点1:param
阅读全文
摘要:1.导包:此处创建的只是简单的maven项目,没有创建springboot项目 <dependencies> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId
阅读全文
摘要:1.增 1.1.dao层接口 public interface UserDao { ... /*插入记录*/ int intsertUser(User user); ... } 1.2.绑定的mapper.xml <!--插入语句--> <insert id="intsertUser" parame
阅读全文
摘要:学习网址:https://mybatis.org/mybatis-3/zh/index.html 1.MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。 2.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 3.MyBatis 可以通
阅读全文
摘要:如果现有的strter无法满足自己目前的需求,可以自定starter 实现步骤: 1.创建两个项目 1.1创建一个maven项目(相当于面子:里面引入1.2的依赖) 1.2用springboot的快速向导创建一个sprinboot的项目(相当于里子) 目的:maven项目引入1.2的依赖,其他模块引
阅读全文
摘要:1.profile功能(多配置文件功能,可以决定使用哪个配置文件) 这里需要注意的是: 1.起作用的配置有两个: 1.默认的配置文件application.properties 2.自定义的配置文件application-pro.yml(前缀必须是application) 并且是两个配置文件共同起作
阅读全文
摘要:1.springboot Actuator 简介: 未来每个微服务在云上部署以后,我们都会对其进行监控、追踪、审计、控制等。springboot就抽取了Actuator场景,使得每个微服务能快速的引用即可获得生产级别的应用监控 简单实用步骤: 1.引入依赖: <!--引入监控功能--> <depen
阅读全文
摘要:springboot2.2.0版本开始引入junit5作为单元测试默认库 junit5的常用注解:参考地址:https://junit.org/junit5/docs/current/user-guide/ 1.@Display:为测试类或者测试方法设置展示名称 public class Sprin
阅读全文
摘要:1.引入redis的stater依赖 <!--引入redis的stater--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifact
阅读全文
摘要:步骤: 1.引入mybatis的stater <!--导入mybatis的stater依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</arti
阅读全文
摘要:1.jdbc 快速建立springboot项目时,在sql场景里选择mysql和spring data jdbc pom文件中: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star
阅读全文
摘要:用法:使用模板引擎进行处理 在templates新增error文件夹如图: 定制错误解析逻辑 一:第一种方式:(@ControllerAdvice和@ExceptionHandler处理全局异常;底层是ExceptionHandlerExceptionResource支持的) 重点1:@Contro
阅读全文
摘要:配置拦截器需要实现两步 1.配置自己的拦截器,实现HandlerInterceptor接口,重写里面的三个方法,注意方法的执行时机 @Slf4j public class LoginInterceptor implements HandlerInterceptor { //重点1:目标方法执行前执行
阅读全文
摘要:示例: 1.页面代码如下: 重点1: enctype="multipart/form-data"是必须的,且是固定写法 <form action="/upload" method="post" enctype="multipart/form-data"> <div> <label for="emai
阅读全文
摘要:1.thymeleaf 基本语法: 1.变量取值:${...} 获取请求域,session域,对象等的值 2.选择变量:*{...}获取上下文对象值 3.消息:#{...}获取国际化等值 4.连接:@{...}生成链接 5.片段表达式:~{...}jsp:include作用,引入公共页面 基本使用:
阅读全文
摘要:什么是内容协商,可以根据客户端可接收的类型,给客户端返回不同格式的报文,例如客户端可以接受json的报文,就返回json的报文,当客户端可以接受xml的报文,就返回xml的报文! 1.响应json数据 响应json数据:jackson.jar+@ResponseBody 在web启动器中: <dep
阅读全文
摘要:简单的参数解析原理可以参考日记14.请求映射的原理.note 这一节主要探讨复杂参数的解析原理: Map,Errors/BindingResult,Model,RedirectAttribute(重定向携带数据), ServletResponse(response),SessionStatus,Ur
阅读全文
摘要:1.注解 注意:绑定到map上的,获取到的属性类型都是String! 1.注解 : 1.1路径变量获取 @PathVariable获取请求路径上的传参: 示例:(两种用法) //1.标注在方法属性上:@PathVariable("id") String id并指定请求路径上绑定的名称 //2.标注在
阅读全文
摘要:当所有的请求来了时,会先进入DispatcherServlet类中的doDispatch进行处理 如请求路径是:http://localhost:8080/hello?id=12时 DispatcherServlet类的代码片段如下: protected void doDispatch(HttpSe
阅读全文
摘要:rest风格,即请求路径相同,但是请求方式不同代表不同处理 1.get请求:获取对象 2.post请求:修改对象 3.delete请求:删除对象 4.put请求:增加对象 1.controler代码 @RequestMapping(value = "/user" , method = Request
阅读全文
摘要:静态资源:例如js,css,图片等,放在类路径下的:/static (or /public or /resources or /META-INF/resources),可以直接访问 例如:http://localhost:8080/aa.jpg 例如:在resource文件下创建下面存放静态资源的文
阅读全文
摘要:1.key: value kv之间有空格 2.大小写敏感 3.使用缩进表示层级关系 4.缩进的空格数不重要,只要相同层级的元素左对齐即可 5.'#'表示注释 6.字符串无需加引号,如果要加,"与"表示字符串内容 会被转义 /不转义 数据类型: 1.字面量:单个的,不可再分的值:date、boolea
阅读全文
摘要:1.lombok简化javabean的开发 1.在springboot项目中引入lombok的包,这个包被spring-boot-starter-parent进行版本管理,所以需要导入lombk <dependency> <groupId>org.projectlombok</groupId> <a
阅读全文
摘要:springboot自动加载的源码解析: 1.springboot的启动类代码如下: //使用@SpringBootApplication标签标明当前类是springboot的启动类 @SpringBootApplication public class MainApplication { publ
阅读全文
摘要:如何将properties文件中的内容,封装到javabean中 示例: 在springboot的配置文件中(application.properties文件中)有以下两个配置 mycar.brand=奔驰 mycar.price=13万 有实体类: public class Car { priva
阅读全文
摘要:如何引入定义的原生xml文件呢: 在任意的组件标签标注的类上加上@ImportResource标签指定xml文件的路径: 例如: @Import({Person.class,Dog.class}) //指定引入的配置文件类路径 @ImportResource("classpath:bean.xml"
阅读全文
摘要:条件装配:满足Conditional指定的条件,则进行组件注入 使用@ConditionalOnBean作为示例进行示范,注意执行结果和@ConditionalOnBean的位置有很大关系 1.加到方法上 @Import({Person.class,Dog.class}) @Configuratio
阅读全文
摘要:@Import({Person.class,Dog.class}):自动给容器中注入这两个组件,这两个组件在容器中的name=包名.类名 注意:@Import这个标签只能在组件上使用,例如在@Configuration或者@control或者@service标注的类上使用 例如:@Configura
阅读全文
摘要:1.spring注册bean组件:使用的是配置进行注册 2.springboot注册bean组件:使用的是@configuration配置类的方式 1.配置类:( 1.配置类中使用@Bean标注在方法上给容器注册组件,默认是单实例的 2.配置类本身也是组件 3.外部无论对配置类中的组件的注册方法(P
阅读全文
摘要:springboot不需要配置包扫描,是包自动扫描的,那是如何起作用的呢? 原理: 1.确定启动类的位置,springboot会自动加载启动类1.所在包 2.及其启动类下的子包的所有注解组件 2.但是启动类上层文件夹(即其父类包中的组件和注解并不会自动扫描加载) 这就衍生出一个问题,如何控制扫描的文
阅读全文
摘要:1.parent标签:统一解决引入的jar包版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.3</vers
阅读全文
摘要:springboot使用的是嵌入式的tomcat服务器 1.如何修改和定制servlet容器的相关配置 修改servlet有关的配置(ServerProperties) 例如在application.properties server.port=8081 server.context-path=/c
阅读全文
摘要:1.如果是浏览器,返回一个默认的错误页面:包含了错误信息 2.如果是客户端访问(如用supui来调用,或其他工具来调用时) 返回:是一个json字符串 { "timestamp": "2020-09-24T03:02:39.488+00:00", "status": 404, "error": "N
阅读全文
摘要:15.springboot的应用示例 3种做法:该项目使用了thymeleaf模板,所以会去templates文件夹下去找index.html 1.后台写个controler @Controller public class HelloControl { @RequestMapping({"/","
阅读全文
摘要:参考地址;https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#boot-features-developing-web-applications Spring MVC auto-configurat
阅读全文
摘要:模板引擎(jsp,Velocity,FreeMarker,Thymeleaf等)原理:结合模板和数据 springboot推荐使用Thymeleaf:语法简单,功能强大! 使用步骤: 1.引入模板引擎的stater:pom文件中写入配置 <!--引入模板引擎--> <dependency> <gro
阅读全文
摘要:springboot对静态资源的映射规则: @ConfigurationProperties( prefix = "spring.resources", ignoreUnknownFields = false ) public class ResourceProperties { 可以设置和静态资源
阅读全文
摘要:市场上的日志框架: JUL,JCL,Jboss-logging,logback,log4j,log4j2,slf4j... 日志门面(日志的抽象层:相当于接口) 日志实现(接口的实现) JCL(jakarta Commons loggging) slf4j(simple logging facade
阅读全文
摘要:在编写springboot的application.properties文件发现不提示,这个问题如何解决! 发现springboot的配置文件均没有小绿叶(spring关联) 正确的为: 解决办法: 1. 2.创建一个application.yml配置文件:发现其带有小树叶图标 3.这时重复1步骤(
阅读全文
摘要:那些属性可以在配置文件中写呢: 参考官方文档:https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#common-application-properties 具体:Part X. Appendice
阅读全文
摘要:4处加载位置如图所示:若存在多个配置文件,springboot会全部加载,相同配置,高优先级会覆盖掉低优先级,形成互补配置 2.我们还可以使用spring.config.location来改变默认的配置文件路径 项目打包好后,我们可以使用命令行参数的形式,启动项目指定配置文件的新路径,指定的配置文件
阅读全文
摘要:1.多profile文件 我们在编写配置文件编写时,文件名称可以是application-{profile}.properties/yaml 默认是application.properties的配置 场景:我们创建了多个properties配置文件,比如生产/测试等等,让指定的配置文件生效 1.测试
阅读全文
摘要:配置文件占位符 1.随机数 random.int random.value random.long random.int(10) random.int[1024,65536] person.age=${random.int} person.name=吴孟达${random.uuid} 2.占位符获取
阅读全文
摘要:1.@PropertySource:加载指定路径的配置文件 用法:意思是加载person.properties配置文件中的值,并进行绑定 @PropertySource("classpath:person.properties") @Component //@ConfigurationPropert
阅读全文
摘要:1.基本语法 空格必须存在! k:(空格)v 表示一对键值对,空格必须存在!!! 以空格的缩进来控制层级关系,左对齐的一列数据属于同一层级: 例如: server: port: 8081 path: /hello 属性和值都是大小写敏感的! 2.值的写法 1.字面量:普通得值(数字,字符串,布尔)
阅读全文
摘要:spring boot使用一个全局的配置文件,文件名称是固定的 1.application.properties 2.application.yml或application.yaml 配置文件的作用:修改springboot 自动配置的默认值,spring boot在底层都帮我们配置好 YAML(Y
阅读全文
摘要:1.使用Spring Initializr(spring项目快速创建向导) 2 3.选择项目需要导入的启动器 快速创建的项目结构如下: 如:更改启动tomcat的端口号 server.port=8081 pom文件中的写法: <parent> <groupId>org.springframework
阅读全文
摘要:1.创建maven项目 2.导入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</ve
阅读全文
摘要:目标;当地址栏http://localhost:8080/hello时,页面可以输出hello springboot 前提:maven使用的是3.3版本以上,jdk在maven配置文件中指定版本为1.8 <profile> <id>jdk-1.8</id> <activation> <jdk>1.8
阅读全文
摘要:1.spring是什么? 轻量级的开源j2EE框架,是一个容器框架,用来封装javabean,中间层框架,可以起到一个连接作用,比如说是把srtus和hibernate粘合一起使用 可以使企业开发更快、更简洁 spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架 -从大小与开销
阅读全文
摘要:1.@ResponseBody 1.@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中一般在异步获取数据时使用【也就是AJAX】 2.在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加
阅读全文
摘要:<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--数据库-
阅读全文
摘要:<!--开启mvc的注解驱动模式,springmvc的开挂模式--> <mvc:annotation-driven></mvc:annotation-driven> 如果静态资源如html和js等无法访问,可以加上下面注解 <mvc:default-servlet-handler></mvc:def
阅读全文
摘要:@ResponseBody使用:将响应数据放入到响应体中 只要返回的数据是json数据即可! 1.导入jackson的包 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</
阅读全文
摘要:<!--配置视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/WEB-INF/page
阅读全文
摘要:@ModelAttribute注解可以标注在方法上,也可以标注在方法的参数上 1.标注在方法上,该方法回提前运行:如下,当浏览器访问到该类下的所有请求时,都会先执行@ModelAttribute标注的方法,并且每次执行请求时都会访问 @Controller public class MyFirstC
阅读全文
摘要:web.xml中的配置 <context:component-scan base-package="cn.com"></context:component-scan> <!--配置视图解析器--> <bean class="org.springframework.web.servlet.view.I
阅读全文
摘要:1.前端控制器的架构: 前端控制器在web.xml的配置:拦截请求,智能派发,并启动spring容器! <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.se
阅读全文
摘要:1.在参数上写入map 2.在方法上写上model 3.在方法上写上modelMap 4.使用ModelAndView 页面代码一致:利用el表达式从4个域中取数据,看数据存储在哪个域中? <body> pageContext:${pageScope.name}<br/> request:${req
阅读全文
摘要:M:model模型,封装和映射数据 V:view视图,页面显示工作(.jsp) C:Controller控制器:显示某个网站的跳转逻辑 1.web.xml文件的写法:按照上图可以方面理解前端控制器 <!-- springmvc思想中有个前端控制器拦截所有请求,并智能派发 这个前端控制器其实是个ser
阅读全文
摘要:一般情况下:使用于web项目 我们已此中方式获取ioc容器和启动spring容器! ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc.xml"); 这种方法有较多弊端 1.spring容器启动时创建的各种bean在项目停
阅读全文
摘要:1.spring-aop底层就是动态代理,例如有两个切面类(A_Aspect和B_Aspect)同时切目标方法 A_Aspect{ try{ @Before(前置通知) mthod.invoke(obj,args)或是环绕通知的pjp.procced(args){ >此时并没有真正的执行目标方法,而
阅读全文
摘要:1.声明式事物 2.编程式事物 事务就是一组由于逻辑上紧密关联而合并成一个整体(工作单元)的多个数据库操作, 这些操作 1.要么都执行, 2.要么都不执行 1.事务的四个关键属性 1.原子性: 原子本意是不可再分,事物的原子性表现在一个事务中涉及到多个操作在逻辑上缺一不可。事务的原子性要求事务中的所
阅读全文
摘要:AOP:面向切面编程 OOP:面向对象编程 面向切面编程:基于OOP基础上的新的编程思想 只在程序云运行期间,将某段代码动态的切入到指定方法的指定位置进行与运行的这种编程方式 动态代理的实现: 需求:在方法执行前/执行后/异常动态的打印日志 实现原理:使用动态代理方式(底层是反射)执行 1.接口:定
阅读全文
摘要:示例: 1.bean层: 1.1 public class Book {} >模拟的两个实体类中没有具体属性 1.2 public class User {} 2.service层 2.1Book的service类: @Service >加入了service标签 public class BookS
阅读全文
摘要:使用spring的单元测试: 测试代码为: @ContextConfiguration(locations = "classpath:ioc.xml") @RunWith(SpringJUnit4ClassRunner.class) public class Test { @Autowired Bo
阅读全文
摘要:1.@Controller:控制器;我们推荐给控制器层(servlet)的组件加这个注解 2.@Service:业务逻辑;我们推荐业务逻辑层的组件添加这个注解 3.@Repository:给数据库层(持久层,dao层)的组件添加这个注解 4.@Component:给不属于以上几层的组件添加这个注解
阅读全文
摘要:1.可以使用字面量 2.引用其他bean 3.引用其他bean的某个属性‘ 4.调用非静态方法 5.调用静态方法 示例: 1.使用字面量(支持所有的运算符) >格式为#{} <bean id="person" class="entity.Person" > <property name="age"
阅读全文
摘要:1.autowire="byType" >以属性的类型作为查找依据去容器中找到这个组件 2.autowire="byName" private Car car; 以属性名(car)作为id去容器中找到这个组件,给他赋值;如果找不到就装配null; car=ioc.getBean("car"); 3.
阅读全文
摘要:1.外部文件的config.properties username=wmd >此处需要注意的是:(username是spring的关键字,命名时需要避开,不要使用username) age=24 2.spring配置文件路径 2.1 <?xml version="1.0" encoding="UTF
阅读全文
摘要:容器(可以用来管理所有的组件(类)) 核心关注:IOC和AOP 1.IOC Inversion(反转) Of Control:控制反转 控制:资源的获取方式 1.主动式(要什么资源自己创建) Person{ Book book=new Book(); Dog dog=new Dog(); //复杂对
阅读全文

浙公网安备 33010602011771号