Spring
文章平均质量分 53
spring框架的底层
凉拌海蜇丝
我要一步一步往上爬~
展开
-
策略模式
(1)是什么?策略模式其实很简单,就是针对不同的场景,做出不同的处理策略(2)策略模式的优缺点:优点:(1)可以砍掉代码中过多的if else if 和 switch case语句,使代码更加整洁优雅,一定程度上提高了性能。(2) 新增类型或者场景仅仅需要新增一个处理策略,不需要改动旧代码,遵循了开闭原则,更好维护。缺点:(1)如果场景过多,会产成过多的策略类,一定程度上增加了理解成本(3)怎么用?(案例演示)假设有一个需求,是根据传入的类型Type的不同,构造出不同的对象并且调用相对应的原创 2021-05-21 15:35:38 · 4507 阅读 · 1 评论 -
SpringBoot拦截器简单的拦截校验小Demo
拦截器其实功能上跟过滤器一样,也是AOP切面编程的一种实现方式,只不过它能更方便的充分调用Service方法,可以注入 Controller层,Service层,Mapper层等等进行逻辑判断,因为拦截器是基于Java反射机制创建并调用的,属于SpringMvc子容器,父容器完成初始化完成后才进行创建,所以可以注入和调用所有父容器中的service假设有个需求:根据某个入参ID判断是否1.是的话才允许调用并且同时记录请求响应时间,不是的话就返回(1)自定义一个拦截器:package com.examp原创 2021-04-12 18:15:27 · 344 阅读 · 0 评论 -
SpringBoot过滤器实战超简单上手演示
Filter依赖于Servlet容器,属于Servlet的一部分,生命周期由Servlet容器管理,是AOP切面编程的一种具体实现,它自身其实是一个通用的特殊的Service,在请求时会先经过过滤器的处理再针对Service发起真正的请求但是它粒度比较粗,只能针对HttpRequest和HttpResponse前后进行相关校验和逻辑判断处理。同时由于它属于Servlet容器管理,在过滤器内部无法注入Spring容器的实例,也无法调用相关Service方法。例如:自定义Filter:package原创 2021-04-12 17:02:06 · 224 阅读 · 0 评论 -
Spring中@Import作用
在Spring中@Import是一粒非常强力的注解,可以将一个一个类快速注册入容器,这样说可能很抽象,下面将通过两个例子来说明。首先我们回忆一下如何要往Spring容器注入一个类,要加哪些注解?@Controller,@Service,@Repository,@Bean,@Configuration … 加在哪里,就是把当前类实例注入到容器。而@Import,它更像是一种解决依赖关系的,帮助别的类快速注入到容器例:(1)我首先有一个POJO叫Test,(2)我们都知道POJO一般不加注解,要用的原创 2021-04-07 18:15:35 · 457 阅读 · 0 评论 -
SpringBoot使用@Scheduled设置时间格式
具体CronTab定时器怎么用,可以看:Spring使用定时任务原创 2020-11-18 16:22:56 · 696 阅读 · 0 评论 -
SpringBoot+Mybatis配置多数据源
基于数据库一主多从的基础上,做读写拆分缓解数据库压力,或者在分库的基础上,对热点数据库做数据水平分表,这些都是很常见的优化行为。具体配置可以看:Mysql数据库主从复制同步手把手教学(Mac版配置 + Windows版配置 + 踩坑)既然那么多库,那么代码中我们就要连接多个数据源,那么废话不多说,开始动手我们都知道Mybatis它也是遵循着JDBC规范,要指定对应的Mapper接口对其进行动态代理,其次通过启动的时候Configuration读取配置文件,后续从里面获取用户名,驱动包,密码,端口号,原创 2020-10-29 11:23:59 · 731 阅读 · 0 评论 -
SpringBoot如何获取当前项目全部Controller接口的两种方式
业务场景自己想,只分享技术实现。下面的演示由于我为了方便,直接在公司项目中写的,所以一些敏感信息专有名词我要注释,望谅解。首先我们都知道,Spring的IOC机制,所有的接口和service都存在一个map容器,通过BeanFactory和ApplicationContext可以拿。那么我们可以从这个开刀.方案一(1)想想有什么方法或者接口是能够获取到ApplicationContext的,答案当然是有,Aware接口嘛,找到一个ApplicationContextAware,理论上就能获取到Appl原创 2020-10-27 16:42:12 · 17955 阅读 · 13 评论 -
SpringBoot中的Aware接口
看源码过程中可以看到很多XXXAware,之前没去深究,直到看到有人面试阿里被问到这问题。才决定去了解一下。(1)Aware是什么?是一个接口,里面空白一片,没有任何方法,它是一个空荡荡的定义,一种标记。(2)有什么用?Aware的英文意思是“可感知”,它自身是一个空白的接口,但是它有很多实现类,所以它的功能其实就是可以让调用者获取到某些信息,例如:加载当前Bean的容器名,当前Bean在容器中的BeanName,获取一些文本信息和资源文件等等,去获取加载当前Bean的加载器信息,等等等等。我们原创 2020-10-22 18:33:58 · 2391 阅读 · 0 评论 -
关于Properties/YAML/YML语法的小总结
首先说YML,YAML,Properties的区别:(1)写法不一样。Properties类似于:spring.datasource.username = XXX ,其他两者是缩进的写法,可读性properties更加好接受,但是yaml和yml看上去更加简洁优雅。(2)加载顺序不一样。都是配置文件,启动后Configuration配置类都会去读取和加载里面写的参数,只不过加载的优先级顺序不一样,YML 优先级最高 , YAML 第二,Properties第三。后加载的,会把先加载的覆盖掉。(3)ym原创 2020-10-20 15:32:49 · 4470 阅读 · 1 评论 -
Spring自定义注解实现AOP做简单的拦截/权限校验
关于AOP的资料:AOP(Spring的面向切面编程)(1)新增依赖,pom.xml文件中新增:<!--ASPECT--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </depen原创 2020-10-10 17:18:22 · 868 阅读 · 0 评论 -
SpringBoot中循环依赖问题由浅入深看源码
Spring在启动类启动的时候,就会自动扫描所有加了对应注解的类,然后把它们通过反射,调用默认的构造方法以单例模式创建出来,然后存放在Map容器中。这个是传说中的IOC。但是假设现在有这种情况:@Componentpublic class A { public B b = new B(); public A(){ System.out.println("Bean A 的实例化依赖了 B:"+b); }}@Componentpublic class B原创 2020-10-05 23:42:33 · 611 阅读 · 0 评论 -
网址为 http://localhost:6666/XX/XX 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。 ERR_UNSAFE_(Postman能访问,Chrome无法调试)
网址为 http://localhost:6666/test/index 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。ERR_UNSAFE_PORT记录今天开发中遇到的一个小坑。如上图所示浏览器调试的时候没办法访问到,明明本地服务已经启动了,然后用Postman却可以成功访问:百思不得其解,后面百度上看了,原来是浏览器的问题,Chrome自己默认觉得一些端口号是不安全的,所以不允许发起请求,直接返回服务无法访问页面。具体的端口有以下:1, // tcpmux7, // echo原创 2020-08-17 13:50:16 · 10113 阅读 · 2 评论 -
Tomcat底层结构的简单总结
起因:在帮公司找几个实习生应届生,在校的刚出来,简历却非常丰富,Struts,Spring,Nginx都写着‘熟练’甚至有‘精通’,但是当问起Struts为什么要部署在tomcat,spring不用,不知道。为什么nginx能做反向代理,怎么代理,不知道。客户端发起的请求怎么找到服务端的Service,不知道。再问什么是Tomcat,就背出概念说是web服务器,再问它怎么工作的,又是一连串‘不知道’和‘这个我没去了解过,如果公司有要求我可以去学’…我问的真的没有一个刁难刁钻的问题,我不会叫他们写出责任链逐层原创 2020-08-15 14:04:48 · 423 阅读 · 0 评论 -
SpringBoot不同环境(生产/开发/测试/本地)读取不同Properties配置文件
在校做小实验项目都没这么复杂,所以导致很多实习生都不去思考,匆匆忙忙CURD,配置文件也是一套吃遍天。但是在真实的项目开发中,往往会有很多的环境,比如我拉取代码下来,要把Mysql和Redis数据源改成自己本地的,启动端口号也改回本地的(防止端口冲突),如果就一个properties,每个人拉取下来都要修改一遍,提交的时候又要修改一遍,不烦吗?于是这篇博客主要用来介绍如何处理这种情况。(1)首先在现有的基础上新增三个新的配置文件,注意是properties-XXX .properties ,这里的XXX就原创 2020-07-17 14:31:43 · 1638 阅读 · 0 评论 -
RestTemplate的简单使用
Spring框架提供的发起http请求服务的封装,依赖于JDK的HTTP连接工具,提供了大量简单的http请求方法。简化了发起http访问的代码编写。妈妈再也不用担心我写一堆Connection,OS WriteOutPutStream, HttpClient那些老旧的方式了。(底层也是java.net包的,封装了一个HttpClient),同时它还能方便的指定返回值类型,还能顺便帮我们映射转换成POJO,是非常方便。怎么用RestTemplate restTemplates = new RestTem原创 2020-07-01 16:28:06 · 238 阅读 · 0 评论 -
Spring启动类源码学习小记
现在面试Java 的,都必备SpringBoot了,一说SpringBoot,面试官又喜欢问底层,我也是这种形式主义的受害者之一,但是还别说,自从看了底层源码,心中大致上也有个了解,再碰到出问题的时候,解决起来也是比较轻松,所以说,虽然增删改改用不上,但是对于自己未来的发展还是非常有帮助的。先随便看一个SpringBoot的启动类。可以看到最主要的就是一个run方法,理所当然点击进去看。继续点击进去run它在这一层new了一个SpringApplication并且又调用run,那就陪着它run进去原创 2020-06-15 23:30:55 · 389 阅读 · 0 评论 -
Vue.js配置全局参数并向后端SpringBoot接口发Get/Post请求
先说配置,在axios发送请求的地方要加请求路径,但是如果分散在不同的地方很明显不好管理,我们要统一在一个路由文件管理。(1)npm i vuex -s安装管理工具,让它来管理我们全部的请求路径。(2)新建一个store文件夹,新增一个index.js文件作为我们的全部请求路径管理文件这里我只是写了请求路径,当然也可以写其他的全局参数,比如域名,比如区分不同环境下的不同配置参数,又或者定义一些全局常量,一些枚举类型,统一的状态码…等等东西都可以放在这里。(3)修改main.JS文件(4)在要原创 2020-05-22 16:15:12 · 911 阅读 · 0 评论 -
手把手教学之:Vue.js+BootStrap+SpringBoot搭建一整套前后端分离的架构系统
这篇文章重点在于BootStrap + VUE 前端页面调用SpringBoot提供的后端接口安装VUE不写了,网上一大堆,看这位大佬的博客就行:https://www.cnblogs.com/Jack-cx/p/10934247.html;最起码一点要在自己页面看到VUE启动成功界面。SpringBoot搭建在我另外一篇博客也有,这里不详细说,随便写一个TestController。我用VSCode打开刚刚自动生成那个VUE项目~安装BootStrap和JQ,依次输入下列三条命令:npm inst原创 2020-05-22 14:01:53 · 3290 阅读 · 0 评论 -
RabbitMQ的介绍/安装和SpringBoot集成简单使用(MacBook版)
RabbitMQ是什么?本来想老规矩百度图镇楼的,想了想算了,自己总结吧,把自己最真实的感受写出。第一次接触到RabbitMQ,是在我刚毕业的时候,还是个愣头青,在一家外包公司傻乎乎的做CURD。有个秒杀场景,组长让我使用RabbitMQ来做延时入库,我懵逼了,完全没听说过的东西,于是去学,去用。后来在名创优品做一个用户邮箱系统有个场景又顺利用到了,所以实习生的经验积累真的很重要~rabbit,理解为兔子,很快很快。MQ,其实就是Message Queue (消息管道的英文缩写)。管道队列,理解成水管原创 2020-05-13 18:40:48 · 421 阅读 · 0 评论 -
SpringBoot在Controller层接参常用方法总结
SpringBoot基础使用章节,如何用各种奇妙姿势接住前端传过来的值~获取参数方式1:获取XXX/XXX?user=XXX这种方式的参数// 获取参数方式1:获取XXX/XXX?user=XXX这种方式的参数 @RequestMapping("/get") public void get (@RequestParam(name = "user") String user){ System.out.println("接收到参数:"+user); retur原创 2020-05-09 14:58:24 · 1182 阅读 · 0 评论 -
SpringBoot使用log4j+slf4j日誌輸出(日誌等級/業務模塊劃分)
按照我這裡的配置,絕對可以使用:導入依賴:<!--把springboot自帶的排除掉--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</a...原创 2020-05-07 23:11:14 · 270 阅读 · 0 评论 -
Mac系统下Spring Boot + Nginx实现负载均衡
Nginx多强大,对性能提升多大,作用是什么,这里不做解释了,百度上一大把。安装下载工具:ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”查看是否安装好了brew: brew -v下载Nginx:brew install nginx检查下是否安装好了ngin...原创 2020-04-29 15:28:50 · 346 阅读 · 0 评论 -
JAVA静态代理与动态代理(JDK和CGLIB)
代理就是有一些工作你不屑于自己做的,或者不方便自己做的,这个时候你就请别人帮你做,拿我最喜欢的偶像坤坤做例子,他开演唱会肯定不会自己收门票,不会自己清场打扫卫生,所以就需要代理来代替他完成一整场演唱会的工作。静态代理,这种方式最好理解,但是也是最差的一种代理方式,属于硬编码的一种,写死在代码中,编译期间就产生了的代理关系。先定义一个坤坤的接口。public interface CXK { ...原创 2020-04-08 18:30:01 · 396 阅读 · 0 评论 -
Springboot使用定时任务
我接触到的定时任务是一个配合微信公众号消息推送的延时推送文案,也就是用户在关注后的X分钟后,X小时或者X天后,将提前写好的文案和填充的数据推送到客户关注的公众号那里。当然还有其他应用场景也陆续用到了,比如定时同步数据,定时保存redis的缓存数据,定时更新缓存数据,定时执行某个任务等等。一开始用的是部署到Linux之后使用crontab执行写好的curl 请求的shell命令。后来发现Spri...原创 2020-03-04 15:20:45 · 2358 阅读 · 0 评论 -
AOP(Spring的面向切面编程)
面试笔试Spring框架必问问题之一。这里就百度图镇楼一下,方便想背熟概念的同学。概念中也很明确说了,是基于动态代理技术实现的:动态代理技术,就是运行期间根据切面类方法动态地对现有方法进行增强。在不修改代码的前提下增强原来方法的功能。说人话:比如玩LOL或者王者荣耀,买装备,一件大装备都是从一件小装备开始,慢慢购买更多的零散的增强型小装备,组合成大装备。这里一开始购买的小装备,就是原有的方...原创 2020-02-12 01:08:33 · 198 阅读 · 0 评论 -
Spring的IOC(依赖注入和控制反转)
Spring框架面试笔试必问之一!非常重要也非常强大,说实话一开始仿照着Spring MVC配置搭建起来,再写几句增删改查,真的配不上叫做学会了那个框架。框架是N种优秀的设计模式和一些很高深的技术组合在一起的完美的精致的产物!百度镇楼!谁在刚毕业的时候,都会去背IOC的概念,背来背去,还是稀里糊涂,就算背的滚瓜烂熟了,要画流程图实现又是考死一大片。所以,我这篇博客,意在帮助所有学习Sprin...原创 2020-02-10 20:32:39 · 427 阅读 · 0 评论