spring
文章平均质量分 84
java小霜
有免费的视频资料 可以关注私信我哦~
展开
-
Spring中涉及的设计模式总结
1.简单工厂(非23种设计模式中的一种)实现方式:BeanFactory。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。 实质:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 实现原理: bean容器的启动阶段: 读取bean的xml配置文件,将bean元素分别转换成一个BeanDefinition对象。 然后通过BeanDefinitionRegist原创 2022-01-15 15:34:48 · 80 阅读 · 0 评论 -
阿里P7:16小时讲完Spring源码解析整套笔记,拿走不谢
正文开发人员面对突如其来的变化,无论在架构选型,还是在日常开发中,总会面临各种挑战和考验。唯有系统性地掌握 Spring Framework 编程思想、设计理念,以及具体的实现方式,方可游刃有余,以免进退失据。作为 Spring 技术生态的基石,Spring Framework 无论在设计,还是在实现上,都是一个优秀的框架,许多细节方面是非常值得我们学习的,包括:Java 语言特性的运用,如反射、动态代理、枚举、泛型、注解、ARM,Lambda 语法等 设计思想和模式的实现,如 OOP、IoC原创 2022-01-11 19:11:00 · 116 阅读 · 0 评论 -
Spring核心知识梳理(面试问的都在这里)
目录一.基本概念1. Java Bean与Spring Bean区别2.什么是BeanDefinition3.BeanFactory 与Application的区别4.BeanPostProcessor5.BeanFactoryProcessor二.IOC1.Bean的生命周期一.Bean创建的生命周期二.Bean销毁的生命周期2.Spring中有几种依赖注入的方式3.循环依赖一.什么是循环依赖二.三级缓存三.AOP四.Spring事务1.原创 2022-01-11 15:09:33 · 109 阅读 · 0 评论 -
Spring中AOP相关源码解析
前言在Spring中AOP是我们使用的非常频繁的一个特性。通过AOP我们可以补足一些面向对象编程中不足或难以实现的部分。AOP前置理论首先在学习源码之前我们需要了解关于AOP的相关概念如切点切面等,以及如何使用AOP,这里可以看我之前的文章:Spring系列之AOP的原理及手动实现创建AOP相关对象对于Java这种面向对象语言来说任何功能的实现都是依赖于对象,AOP也不例外。首先我们先来准备好在配置文件中配置好AOP相关的属性。spring.xml <be原创 2022-01-10 21:18:21 · 93 阅读 · 0 评论 -
Spring核心原理之IoC容器初体验
IoC与DI基本概念IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建、依赖,反转给容器来帮忙实现。我们需要创建一个容器,同时需要一种描述来让容器知道要创建的对象与对象的关系。这个描述最具体的表现就是我们所看到的配置文件。DI(Dependency Injection,依赖注入)就是指对象被动接受依赖类而不自己主动去找,换句话说,就是指对象不是从容器中查找它依赖的类,而是在容器实例化对象时主动将它依赖的类注入给它。我们先从自己设计的视角来考虑。(.原创 2021-12-31 20:24:02 · 663 阅读 · 0 评论 -
Spring核心原理之 IoC容器中那些鲜为人知的细节
Spring IoC容器还有一些高级特性,如使用lazy-init属性对Bean预初始化、使用FactoryBean产生或者修饰Bean对象的生成、IoC容器在初始化Bean过程中使用BeanPostProcessor后置处理器对Bean声明周期事件进行管理等。1 关于延时加载我们已经知道,IoC容器的初始化过程就是对Bean定义资源的定位、载入和注册,此时容器对Bean的依赖注入并没有发生,依赖注入是在应用程序第一次向容器索取Bean时通过getBean()方法完成的。当Bean定义资源的&l原创 2021-12-31 20:07:34 · 79 阅读 · 0 评论 -
Spring IOC基本介绍
一、Spring IOC 入门示例通过代码项目演示Spring IOC 示例需要以下几个过程:下载Spring5 框架 Idea 开发工具创建 Java 工程 导入 Spring 5相关的jar 包 编写普通演示类和普通方法 编写 Spring 配置文件 编写 Spring IOC 测试代码1.1、普通类和普通方法public class User { public void add() { System.out.println("add......"); }}1原创 2021-12-31 19:53:28 · 3313 阅读 · 0 评论 -
基于Spring家族的Spring Security安全框架
一、Spring Security介绍spring security 是基于 spring 的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。在 Spring Framework 基础上,spring security 充分利用了依赖注入(DI)和面向切面编程(AOP)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。是一个轻量级的安全框架。它与 Spring MVC 有很好地集成.核心功能:认证、验证原理:原创 2021-12-30 19:26:02 · 211 阅读 · 0 评论 -
聊聊自定义SPI如何使用自定义标签注入到spring容器中
实现套路1、自定义xsd示例:<?xml version="1.0" encoding="UTF-8" standalone="no"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:tool="http://www.springf原创 2021-12-22 15:27:26 · 140 阅读 · 0 评论 -
Spring事务什么时候会失效?
访问权限问题 方法用final修饰 未被Spring管理 错误的传播特性 自己吞了异常 手动抛了别的异常 自定义了回滚异常 方法内部调用 1、访问权限问题Java的访问权限主要有三种:private、protected、public,它们的权限从左到右,依次变大。但如果我们在开发过程中,把有某些事务方法,定义了错误的访问权限,就会导致事务功能出问题,例如:1 @Service2 public class OrderS..原创 2021-12-22 13:20:02 · 1037 阅读 · 0 评论 -
Spring构造注入不需要加@Autowired?
先看代码:@RestController@RequestMapping("/test")public class TestController { private final TestService testService;// @Autowired public TestController(TestService testService) { this.testService = testService;} @RequestMapping("/sayH原创 2021-12-21 15:03:05 · 813 阅读 · 0 评论 -
深度剖析Spring Boot自动装配机制实现原理
在前面的分析中,Spring Framework一直在致力于解决一个问题,就是如何让bean的管理变得更简单,如何让开发者尽可能的少关注一些基础化的bean的配置,从而实现自动装配。所以,所谓的自动装配,实际上就是如何自动将bean装载到Ioc容器中来。实际上在spring 3.x版本中,Enable模块驱动注解的出现,已经有了一定的自动装配的雏形,而真正能够实现这一机制,还是在spirng 4.x版本中,conditional条件注解的出现。ok,我们来看一下spring boot的自动装配是怎么一回原创 2021-12-20 14:35:07 · 111 阅读 · 0 评论 -
一篇文章让你吃透spring aop底层原理
回顾ioc容器 初始化过程 从@EnableAspectJAutoProxy看起 AnnotationAwareAspectJAutoProxyCreator 上下继承关系如下 beanpostProcessor 工作原理 看这一遍默认你对spring aop使用非常了解,对动态代理也有一定的了解,如果确实不是很了解请看下面的几篇使用相关的文档spring 学习之四(spring的注入方式(xml和annotation))spring学习之五(spring aop编程)回顾ioc容原创 2021-12-20 14:24:17 · 317 阅读 · 0 评论 -
Spring AOP
目录1、Spring AOP简介1.1 什么是 AOPAOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP 采取横向抽取机制,将分散原创 2021-12-20 13:23:11 · 100 阅读 · 0 评论 -
Bean的作用域与Bean的生命周期详解
一、Bean的作用域通过Spring容器创建一个Bean的实例时,不仅可以完成Bean的实例化,还可以设置Bean的生命周期,使用Bean的scope属性为bean设置作用域。语法格式: <bean id="别名" scope="作用域" class="对应实现类">作用域的种类:(sing)作用域 描述 singleton(单例) 在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值 prototype(原型.原创 2021-12-20 13:13:44 · 640 阅读 · 0 评论 -
对Spring IOC容器的思考
最近在看Spring5的视频教学,学到了IOC容器这块,对IOC有些浅薄的理解,分享一二;有错误之处,还请大佬指出IOC(Inversion of Control 控制反转),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。什么叫降低耦合度,大致理解就是在对代码进行维护升级的时候,尽量不去动源代码,而是采用其它方式来进行功能实现,而最常用的就是利用DI(Dependency Injection 依赖注入),通过更改配置文件的方式,来进行升级维护在讨论IOC容器之前,我们要思考,为原创 2021-12-20 13:10:00 · 265 阅读 · 0 评论 -
Spring框架源码分享之三级缓存和父子工厂
记录并分享一下本人学习spring源码的过程,有什么问题或者补充会持续更新。欢迎大家指正!环境: spring5.X + idea建议:学习过程中要开着源码一步一步过Spring中对象的创建宏观流程:创建对象需要的基础数据:beanDefinition在BeanFactory中getBean时做一下三步处理完成对象的创建创建对象:AbstractAutowireCapableBeanFactory中 doCreateBean createBeanInstance(beanN原创 2021-12-18 13:59:25 · 169 阅读 · 0 评论 -
Spring+websocket+quartz实现消息定时推送
websocket 实现步骤 一、环境搭建 二、完成后台的功能 websocket简单的说,websocket是真正实现了全双工通信的服务器向客户端推的互联网技术。全双工与单工、半双工的区别?全双工:简单地说,就是可以同时进行信号的双向传输(A->B且B->A),是瞬时同步的。 单工、半双工:一个时间段内只有一个动作发生。推送和拉取的区别?推:由服务器主动发消息给客户端,就像广播。优势在于,信息的主动性和及时性。 拉:由客户端主动请求所需要的数据。实现消息通信原创 2021-12-12 13:50:56 · 279 阅读 · 0 评论 -
扯一把 Spring 的三种注入方式,到底哪种注入方式好?
循环依赖这个问题,按理说我们在日常的程序设计中应该避免,其实这个本来也是能够避免的。不过由于总总原因,我们可能还是会遇到一些循环依赖的问题,特别是在面试的过程中,面试考察循环依赖,主要是想考察候选人对 Spring 源码的熟悉程度,因为要把循环依赖这个问题解释清楚,涉及到不少 Spring 源码。今天先来聊聊实例的注入方式。1. 实例的注入方式首先来看看 Spring 中的实例该如何注入,总结起来,无非三种: 属性注入 set 方法注入 构造方法注入 我们分别来看下。原创 2021-12-11 14:11:37 · 126 阅读 · 0 评论 -
什么是计时攻击?Spring Security 中该如何防御?
很多人吐槽 Spring Security 比 Shiro 重量级,这个重量级不是凭空来的,重量有重量的好处,就是它提供了更为强大的防护功能。比如最近看到的一段代码:这段代码位于 DaoAuthenticationProvider 类中,为了方便大家理解,我来简单说下这段代码的上下文环境。当用户提交用户名密码登录之后,Spring Security 需要根据用户提交的用户名去数据库中查询用户。查到用户对象之后,再去比对从数据库中查到的用户密码和用户提交的密码之间的差异。而上面这段代.原创 2021-12-11 13:56:52 · 1194 阅读 · 1 评论 -
你真的懂Spring解决循环依赖吗?
前言我们经常会被问到一个问题:Spring是如何解决循环依赖的问题的。 这个问题算是关于Spring的一个高频面试题,因为如果不刻意研读,相信即使读过源码,面试者也不一定能够一下子思考出个中奥秘。本文主要针对这个问题,从源码的角度对其实现原理进行讲解。一、什么是循环依赖多个bean之间相互依赖,形成了一个闭环。 比如:A依赖于B、B依赖于c、c依赖于A通常来说,如果问spring容器内部如何解决循环依赖, 一定是指默认的单例Bean中,属性互相引用的场景。也就是说,Spring的循环依赖原创 2021-12-10 19:32:06 · 102 阅读 · 0 评论 -
说一下 Spring Boot 自动装配原理呗?
每次问到 Spring Boot, 面试官非常喜欢问这个问题:“讲述一下 SpringBoot 自动装配原理?”。我觉得我们可以从以下几个方面回答:什么是 SpringBoot 自动装配? SpringBoot 是如何实现自动装配的?如何实现按需加载? 如何实现一个 Starter?前言使用过 Spring 的小伙伴,一定有被 XML 配置统治的恐惧。即使 Spring 后面引入了基于注解的配置,我们在开启某些 Spring 特性或者引入第三方依赖的时候,还是需要用 XML 或 Java原创 2021-12-10 16:21:49 · 223 阅读 · 0 评论 -
天天说熟练使用各种Spring框架,Spring容器使用流程你会吗?
文章目录Spring容器使用流程前言一、主要流程二、开发步骤2.1 准备Maven项目及环境2.2 准备启动入口类2.3 准备Spring配置文件总结前言Spring容器的API有 BeanFactory 和 ApplicationContext 两大类,他们都是顶级接口。其中ApplicationContext 是 BeanFactory 的子接口。对于两者的说明请参考面试题讲解Spring容器部分。我们主要使用 ApplicationContext 应用上下文接口原创 2021-12-10 16:08:16 · 124 阅读 · 0 评论 -
SpringBoot缓存管理
前言Spring框架支持透明地向应用程序添加缓存对缓存进行管理,其管理缓存的核心是将缓存应用于操作数据的方法(包括增删查改等),从而减少操作数据的执行次数(主要是查询,直接从缓存中读取数据),同时不会对程序本身造成任何干扰。SpringBoot继承了Spring框架的缓存管理功能,通过使用@EnableCaching注解开启基于注解的缓存支持,SpringBoot就可以启动缓存管理的自动化配置。接下来针对SpringBoot支持的默认缓存管理进行讲解。SpringBoot默认缓存管理1、原创 2021-12-10 16:06:43 · 1230 阅读 · 0 评论 -
基于Spring家族的Spring Security安全框架
一、Spring Security介绍spring security 是基于 spring 的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。在 Spring Framework 基础上,spring security 充分利用了依赖注入(DI)和面向切面编程(AOP)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。是一个轻量级的安全框架。它与 Spring MVC 有很好地集成.核心功能:认证、验证原理:原创 2021-12-10 13:47:54 · 2819 阅读 · 0 评论 -
你一直在用的 Spring Boot Starters 究竟是怎么回事
Spring Boot 对比 Spring MVC 最大的优点就是使用简单,约定大于配置。不会像之前用 Spring MVC 的时候,时不时被 xml 配置文件搞的晕头转向,冷不防还因为 xml 配置上的一点疏忽,导致整个项目莫名其妙的不可用,顿感生活无所依恋,简称生无可恋。这要归功于组成了 Spring Boot 的各种各样的 starters,有官方提供的,也有第三方开源出来。可以这么说,基本上你打算用的功能都可以找到,如果没有找到,那就再找一找。用 Spring Boot 的功能组件(例如.原创 2021-12-09 19:30:24 · 108 阅读 · 0 评论 -
Spring为什么建议使用构造器来注入?
本文的内容主要是想探讨我们在进行Spring 开发过程当中,关于依赖注入的几个知识点。感兴趣的读者可以先看下以下问题:@Autowired, @Resource, @Inject 三个注解的区别 当你在使用@Autowired时,是否有出现过Field injection is not recommended的警告?你知道这是为什么吗? Spring 依赖注入有哪几种方式?官方是怎么建议使用的呢?如果你对上述问题都了解,那我个人觉得你的开发经验应该是不错的。本文的内容主要是想探讨我们在进行Sp原创 2021-12-09 19:27:53 · 161 阅读 · 0 评论 -
Spring Boot中6种 注入 Bean 的方式
背景我们谈到Spring的时候一定会提到IOC容器、DI依赖注入,Spring通过将一个个类标注为Bean的方法注入到IOC容器中,达到了控制反转的效果。那么我们刚开始接触Bean的时候,一定是使用xml文件,一个一个的注入,就例如下面这样。我们的项目一般很大的话,就需要成千上百个Bean去使用,这样写起来就很繁琐。那么Spring就帮我们实现了一种通过注解来实现注入的方法。只需要在你需要注入的类前面加上相应的注解,Spring就会帮助我们扫描到他们去实现注入。xml扫描包的方式原创 2021-12-09 19:25:16 · 311 阅读 · 0 评论 -
Springboot和Spring的区别?看完你就明白了
从一道面试题说起面试的时候经常会被问到,spring和springboot的区别。或者SpringMVC和Springboot的区别。其实这样的问法就不是特别合适。因为spring、springboot、springmvc他们三个在spring体系中就不在同一个维度。看一下spring的全部项目spring家族有很多项目,springboot、spring framework、spring cloud等。我们常用的也就是,springboot、springcloud、springse原创 2021-12-09 19:15:55 · 8511 阅读 · 0 评论 -
Spring的@Transactional如何实现的
@Transactional注解简介@Transactional是spring中声明式事务管理的注解配置方式,相信这个注解的作用大家都很清楚。@Transactional注解可以帮助我们把事务开启、提交或者回滚的操作,通过aop的方式进行管理。通过@Transactional注解就能让spring为我们管理事务,免去了重复的事务管理逻辑,减少对业务代码的侵入,使我们开发人员能够专注于业务层面开发。我们知道实现@Transactional原理是基于spring aop,aop又是动态代理模式的原创 2021-12-09 16:13:22 · 150 阅读 · 0 评论 -
Spring整合Mybatis全过程解析
MyBatis 是一款常用的持久层框架,使得程序能够以调用方法的方式执行某个指定的SQL,将执行SQL的底层逻辑进行封装。多数与Spring结合使用,本文讨论Spring如何整合Mybatis,首先看下Mybatis运行机制1. Mybatis运行机制1.1 Mybatis功能架构设计Mybatis的功能架构分为三层:(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。(2)数据处理层:负责原创 2021-12-08 15:45:38 · 1782 阅读 · 0 评论 -
Spring Boot 接口幂等插件使用
幂等概述幂等性原本是数学上的概念,即使公式:f(x)=f(f(x)) 能够成立的数学性质。用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。 幂等性是分布式系统设计中十分重要的概念,具有这一性质的接口在设计时总是秉持这样的一种理念:调用接口发生异常并且重复尝试时,总是会造成系统所无法承受的损失,所以必须阻止这种现象的发生。 实现幂等的方式很多,目前基于请求令牌机制适用范围较广。其核心思想是为每一次操作生成一个唯一性的凭证,也就是 token。一个 t原创 2021-12-08 13:40:57 · 558 阅读 · 0 评论 -
Spring Boot自定义属性配置文件开启提示
前言:有时候在Sping Boot项目中需要自定义属性。又想在配置文件(*.properties)中显示提示时。测试环境:Sping Boot2x + Maven + Lombok准备测试的配置类:@Data@Configuration@ConfigurationProperties(prefix = "animal.default")public class Animal { private String name; private String type;}使用原创 2021-12-08 13:21:11 · 441 阅读 · 0 评论 -
SpringBoot与SpringCloud的相互关系,你都了解吗?
Spring boot是Spring的一套快速配置脚手架,可以基于spring boot快速开发单个微服务,Spring Boot,看名字就知道是Spring的引导,就是用于启动Spring的,使得Spring的学习和使用变得快速无痛。不仅适合替换原有的工程结构,更适合微服务开发。Spring Cloud基于Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。Spring Cloud是一个基原创 2021-12-07 13:35:56 · 156 阅读 · 0 评论 -
SpringBoot整合Mybatis超详细过程
之前搭传统的ssm框架,配置文件很多,看了几天文档才把那些xml的逻辑关系搞得七七八八,搭起来也是很麻烦,那时我完全按网上那个demo的版本要求(jdk和tomcat),所以最后是各种问题没成功跑起来。今天尝试用springboot框架来整合,不敢相信才失败几次就成功了!!现在来记录一下过程:添加POM依赖:关于dao层的依赖就是后面两个mysql的connector和mybatis的starter(这个可是好东西)开始写代码:这里我们有个简单是数据表:我们的目的是用get发原创 2021-12-07 13:33:06 · 849 阅读 · 0 评论 -
SpringCloud中Ribbon负载均衡原理
前言通常我们在配置类中定义一个RestTemplate的bean,然后添加@LoadBalanced注解,则这个RestTemplate就具备了负载均衡的能力,这是为什么呢?实现原理先上结论:ribbon实现的关键点是利用了RestTemplate的拦截器机制(RestTemplate中有一个自己的拦截器列表),ribbon定制了一个的拦截器,然后添加到了这个列表中,在拦截器中实现了ribbon的负载均衡机制。简单来说负载均衡的本质就是,在这个ribbon的拦截器中,根据服务的名称从服务原创 2021-12-07 13:11:25 · 584 阅读 · 0 评论 -
Spring的IOC是啥?有什么好处?
设计模式7大原则为什么会有人说设计模式已死呢,因为spring这些框架帮你做好了类和对象的管理,让你写代码的时候只专注于你实现的功能,而不是设计。先来看看设计模式的7大原则:开放-封闭原则 单一职责原则 依赖倒转原则 最小知识原则 接口隔离原则 合成/聚合复用原则 里氏代换原则,任何基类可以出现的地方,子类一定可以出现依赖倒置假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身原创 2021-12-06 14:20:10 · 236 阅读 · 0 评论 -
为什么Spring技术很强大?
Java 程序员几乎都了解 Spring。它的 IoC(依赖反转)和 AOP(面向切面编程)功能非常强大、易用。而它背后的字节码生成技术(在运行时,根据需要修改和生成 Java 字节码的技术)就是就是一项重要的支撑技术。Java 字节码能够在 JVM(Java 虚拟机)上解释执行,或即时编译执行。其实,除了Java,JVM 上的 Groovy、Kotlin、Closure、Scala 等很多语言,也都需要生成字节码。另外,playscript 也可以生成字节码,从而在 JVM 上高效地运行!而且,字原创 2021-12-06 14:00:22 · 820 阅读 · 0 评论 -
Spring的IOC常用注解(含源码)
一、容器中注入组件1,包扫描 + 组件标注注解 源码:Demo01_ComponentScana)组件标注@Controller @Service @Repository @Componentb)包扫描@ComponentScan @ComponentScan中主要值得解释value:扫描的包路径(数组) excludeFilters:指定扫描的时候按照什么规则排除那些组件(@ComponentScan.Filter)includeFilters:指定扫描的时候只需要包原创 2021-12-06 13:24:04 · 131 阅读 · 0 评论 -
Java全家桶的这些知识,不用学了
众所周知,Java 的知识体系繁冗复杂,但是有很多知识在实际工作中几乎没有人用。很多人在学习过程中,却经常把有限的时间和精力花在了这些“没有用”的知识上,事倍功半。下面我捋一捋 Java 中那些不建议学习的知识点,让大家能避过雷区,尽量提升些学习的精准度。Java 的桌面 GUI 相关技术GUI,即 Graphical User Interface,图形用户界面。Java 的 GUI 相关技术包括:AWT Swing SWT/JFACE JavaFx JavaFx2Java原创 2021-12-04 13:59:20 · 129 阅读 · 0 评论