spring
文章平均质量分 85
spring应用与源码
桐花思雨
这个作者很懒,什么都没留下…
展开
-
SpringMVC接收数组或列表参数
有时候前端请求发送的数据是批量的,此时就要求后端去处理请求时,获取这些批量的请求参数。一般批量的请求参数在Java中是以数组或者集合的形式接收的,而SpringMVC提供了接收和解析数据和集合参数类型的机制本文主要是记录SpringMVC中当前台传过来数组的时候,如何把前台传过来的数据封装到Controller层方法的形参中在了解下面参数如何传递前先记住两个结论当Ajax以编码格式上传数据,必须使用JSON对象传递数据,后台需要使用或者来接收数据当Ajax以编码格式上传数据,必须使用JSON。原创 2022-10-17 18:47:04 · 1815 阅读 · 0 评论 -
Spring JDBC Template之基础篇
Spring JDBC Template之基础篇。原创 2022-10-17 00:07:47 · 238 阅读 · 0 评论 -
Spring JDBC Template之入门篇
Spring JDBC Template 之入门篇原创 2022-10-16 23:52:50 · 125 阅读 · 0 评论 -
Spring容器 & SpringMVC容器 & Web容器的关系
首先 和 它俩都是容器,容器就是管理对象 的地方,例如 就是管理 对象的,而 容器和 容器,就是管理 对象的地方直白的点, 就是管理 对象的容器, 就是管理 和 对象的容器,这下你明白了吧。所以我们在 的 配置文件里配置的扫描路径就是 的路径,而 的配置文件里自然配的就是 和 的路径。至于他是怎么管理起来的,又是怎么注入属性的,这就涉及到他们底层的实现技术了 的 配置文件配置 的 配置文件配置1.2. 容器 & 容器不同点其次, 容器和 容器的关系是父子容器的原创 2022-10-16 23:13:51 · 313 阅读 · 0 评论 -
Spring注解驱动开发之BeanPostProcessor后置处理器
接口称为bean的后置处理器,它有力的支撑了Spring AOP的实现,所以了解学习接口非常有必要,对于我们理解Spring AOP有很大的帮助。原创 2022-10-04 01:46:27 · 545 阅读 · 0 评论 -
Spring注解驱动开发之使用@PostConstruct和@PreDestroy指定初始化和销毁前后的方法
在之前的文章中,我们介绍了如何使用@Bean注解指定初始化和销毁的方法,也介绍了使用和来处理bean的初始化和销毁。除此之外,在JDK中还提供了两个注解能够在bean创建完成且属性赋值完成之后初始化方法之前执行一些工作和在容器销毁bean之前通知我们进行一些工作。原创 2022-10-03 22:47:17 · 819 阅读 · 0 评论 -
Spring注解驱动开发之使用InitializingBean接口和DisposableBean接口指定初始化和销毁的方法
在上一篇文章中,我们讲述了如何使用@Bean注解来指定bean初始化和销毁的方法,具体的用法就是在@Bean注解中使用initMethod属性和属性来指定初始化方法和销毁方法。除此之外,Spring中还提供了接口和接口的方式来指定bean初始化和销毁的方法Spring中提供了一个接口,该接口为bean提供了属性填充完成后的处理方法,它只包括方法,凡是继承该接口的类,在bean的属性填充完成后都会执行该方法}根据接口中提供的方法的名字不难推断出,方法是在属性赋好值之后调用的。原创 2022-10-03 19:27:10 · 391 阅读 · 0 评论 -
Spring注解驱动开发之使用@Bean指定初始化和销毁的方法
通常意义上讲的bean的生命周期,指的是bean从创建、初始化、属性填充、经过一系列的流程,最终销毁的过程。只不过在Spring中bean的生命周期是由Spring容器来管理的,在Spring中,我们也可以自己来指定bean的初始化和销毁的方法。我们指定了bean的初始化和销毁方法之后,当容器在bean进行到当前生命周期的阶段时,会自动调用我们自定义的初始化和销毁方法。原创 2022-10-03 17:23:32 · 961 阅读 · 0 评论 -
SpringMVC中的接口传参接参总结
不推荐使用,仅在单个参数的时候选择使用。推荐使用,适用于单个、多个参数的情况。以上三种方式的调用结果都是成功的。原创 2022-09-29 19:18:37 · 1370 阅读 · 2 评论 -
Spring中的@Autowired,@Qualifier和@Primary注解
目录1. `@Autowired` 注解1.1. `@Autowired` 注解的使用1.1.1. 类成员变量上(较为常用)1.1.2. 用在方法上1.1.3. 用在构造器上1.1.4. 用在参数上1. @Autowired 注解1.1. @Autowired 注解的使用@Autowired 注解,可以对类成员变量、方法和构造函数进行标注,完成自动装配的工作1.1.1. 类成员变量上(较为常用)@Controllerpublic class SoakController { @Autowi原创 2022-03-14 22:35:50 · 1326 阅读 · 1 评论 -
@Autowired与@Resource的区别
目录1. `@Autowired` 与 `@Resource` 的区别1.1 来源1.2. 默认使用的装配方式1. @Autowired 与 @Resource 的区别1.1 来源@Resource 不是 Spring 的注解,它的包是 javax.annotation.Resource@Autowired 是 Spring 框架提供的注解1.2. 默认使用的装配方式@Autowired 默认使用 byType 自动装配,如果匹配到类型的多个实例,再通过 byName 来确定 bean,默原创 2022-03-14 21:22:14 · 751 阅读 · 0 评论 -
Spring项目中时间格式化的方法
目录前言使用工具类 `SimpleDateFormat`使用 `@JsonFormat`前言在 web 开发中,我们经常会遇到前台和后台进行时间格式转换交互,下面做一下总结使用工具类 SimpleDateFormat使用 @JsonFormat使用 @JSONField使用 @DateTimeFormat使用工具类 SimpleDateFormat对于这个工具类这里不做过多的赘述SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd原创 2021-04-17 13:53:57 · 5691 阅读 · 0 评论 -
Spring中的@NumberFormat注解
目录`@NumberFormat` 注解的作用使用示例@NumberFormat 注解的作用负责输入输出数据的格式化工作,如将数据转换成特定的货币类型格式,百分比类型格式等使用示例先写个 index.html,分别测试整数、百分数、货币类型<!DOCTYPE html><html><head> <title>Spring MVC的数据类型转换</title> <meta http-equiv="Content-T原创 2022-01-01 20:39:28 · 11378 阅读 · 0 评论 -
Spring源码之FactoryBean接口的作用和实现原理
目录1.`FactoryBean` 接口简述2.`FactoryBean` 在 `Spring` 中的应用1.FactoryBean 接口简述BeanFactory 与 FactoryBean 接口,相信很多刚翻看 Spring 源码跟我一样很好奇这俩货怎么长得这么像,分别都是干啥用的。BeanFactory 是 Spring 中 Bean 工厂的顶层接口,也是我们常说的 Spring IOC 容器,它定下了 IOC 容器的一些规范和常用方法并管理着 Spring 中所有的 Bean,今天我们不讲它,我原创 2022-03-07 00:18:35 · 813 阅读 · 0 评论 -
Spring自带的工具类总结
目录断言断言断言是一个逻辑判断,用于检查不应该发生的情况Assert 关键字在 JDK 1.4 中引入,可通过 JVM 参数 -enableassertions 开启SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查// 要求参数 object 必须为非空(Not Null),否则抛出异常,不予放行// 参数 message 参数用于定制异常信息。void notNull(Object object, String message)// 要求参数必须空(Nu原创 2022-02-26 23:10:53 · 245 阅读 · 0 评论 -
JDK动态代理和CGLIB动态代理的区别
目录`JDK` 动态代理`CGLIB` 动态代理JDK 动态代理自 JDK 1.3 以后,Java 提供了动态代理技术,允许开发者在运行期创建接口的代理实例,后来这项技术被用到了 Spring 的很多地方。JDK 动态代理主要涉及 java.lang.reflect 包下边的两个类:Proxy 和 InvocationHandler。其中,InvocationHandler 是一个接口,可以通过实现该接口定义横切逻辑(如:我们在方法执行前后打印的日志,本文只是为了演示,实际的应用一般不会只是简单的打印日原创 2022-02-26 19:18:37 · 6435 阅读 · 1 评论 -
Spring的注入方式中,官方推荐哪种方式
目录`Spring` 的注入方式属性注入`set` 方法注入Spring 的注入方式首先来看看 Spring 中的实例该如何注入,总结起来,无非三种方式属性注入set 方法注入构造器注入属性注入属性注入是大家最为常见也是使用最多的一种注入方式了,代码如下@Servicepublic class BService { @Autowired AService aService; //...}这里使用 @Autowired 注解注入。另外也有 @Re原创 2022-01-03 17:48:57 · 1333 阅读 · 0 评论 -
如果Service有多个实现类,Spring怎么知道该注入哪个实现类
目录`Service` 有多个实现类该怎样解决Service 有多个实现类该怎样解决Controller 中注入 service 的时候使用 @Autowired 自动注入,使用注解 @Qualifier("beanId") 来指定注入哪一个Controller 中注入 service 的时候使用 @Resource(type = 类名.class) 来指定注入哪一个每个 service 的实现类都可以指定名称(使用 @Service(“名称”)),Controller 中注入 service 的原创 2021-12-19 16:17:35 · 1434 阅读 · 0 评论 -
SpringMVC防止表单重复提交
目录前言前言在系统中,有些接口如果重复提交,可能会造成脏数据或者其他的严重的问题,所以我们一般会对与数据库有交互的接口进行重复处理首先可以在前端做一层控制。当前端触发操作时,或弹出确认界面,或 disable 禁用按钮等等,但是这并不能彻底解决问题。假设我们不是从客户端提交,而是被其他的系统调用,还会遇到这种问题为了彻底解决问题,还需要在后端对接口做防重处理一般会引起表单重复提交的场景在网络延迟的情况下让用户有时间点击多次 submit 按钮导致表单重复提交表单提交后用户点击【刷新】按钮原创 2021-11-27 21:45:35 · 1760 阅读 · 2 评论 -
SpringMVC中Model,ModelAndView,ModelMap的区别
目录前言`Model`前言在 springMVC 请求处理方法返回的参数类型中,最重要就是 Model 和 ModelAndView了。使用 Model 和 ModelAndView 这两者之间有着很大的区别Model 只是用来传输数据的,并不会进行业务的寻址ModelAndView 却是可以进行业务寻址的,就是设置对应的要请求的静态文件,这里的静态文件指的是类似 jsp 的文件ModelModel 是一个接口,实现类为 ExtendedModelMap 和 ModelMap。Model 本原创 2021-10-19 14:10:31 · 810 阅读 · 0 评论 -
SpringMVC的原理
目录`springMVC` 中的 `MVC` 模式springMVC 中的 MVC 模式M:就是 Model 模型(完成业务逻辑:service + dao + entity)V:就是 View 视图(做界面的展示 jsp,html 等)C:就是 Controller 控制器(接收请求 ~ 调用模型 ~ 根据结果派发页面)...原创 2021-10-17 23:02:43 · 169 阅读 · 1 评论 -
Spring中的bean是否是线程安全的
目录前言`spring` 的 `bean` 作用域前言spring 容器中的 bean 是否线程安全,容器本身并没有提供 bean 的线程安全策略,因此可以说 spring 容器中的 bean 本身不具备线程安全的特性,但是具体还是要结合具体 scope 作用域的去研究spring 的 bean 作用域singleton:单例,默认的作用域prototype:原型,每次获取该 bean 都会创建一个新的 beanrequest:每次 HTTP 请求会产生一个新的 bean,该 bean仅在当前原创 2021-10-17 17:22:40 · 583 阅读 · 0 评论 -
SpringMVC中请求的转发和重定向
目录转发和重定向重定向 `redirect`转发 `forward`转发和重定向重定向 redirect/* * 之前的写法 * response.setStatus(302); * response.setHeader("Location", "login_success.html"); */// 重定向写法: 重新定位方向 参数即跳转的位置response.sendRedirect("login_success.html");浏览器 URL 地址上显示的是最后的那个资源的路径地原创 2021-10-03 17:17:33 · 1049 阅读 · 0 评论 -
Spring源码之事务(二)
寻找事务类或方法对应的增强器跟进 getAdvicesAndAdvisorsForBean 方法spring 通过 getAdvicesAndAdvisorsForBean() 获取指定 bean 对应的增强器,不但要找出增强器,而且还需要判断增强器是否满足要求@Override@Nullableprotected Object[] getAdvicesAndAdvisorsForBean( Class<?> beanClass, String beanName, @Nul原创 2021-09-08 18:11:15 · 365 阅读 · 0 评论 -
Spring事务及事务不生效的原因
目录注解 `@Transactional` 的属性参数`Spring` 中事务的传播机制`Spring` 中事务的隔离级别常用数据库的隔离级别`readOnly` 事务的读写性事务的只读性概念应用场景`timeout` 超时时间`rollbackFor` 和 `rollbackForClassName` 遇到时回滚`noRollbackFor` 和 `noRollbackForClassName` 遇到时不回滚`value` 指定使用的事务管理器`spring` 事务不生效的原因数据库引擎不支持事务`@Tr原创 2021-09-06 00:08:47 · 3849 阅读 · 7 评论 -
Spring的依赖注入的方式
目录什么是依赖注入与控制反转依赖注入与自动装配的关系`spring` 基于 `xml` 文件形式的依赖注入的方式什么是依赖注入与控制反转依赖注入:当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,创建被调用者的实例的工作由 IOC 容器来完成。然后注入调用者,称为依赖注入控制反转:当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。然而采用控制反转原创 2021-04-20 11:17:48 · 245 阅读 · 0 评论 -
Spring之AOP的实现
一:采用声明式的方式实现(基于XML)1:Maven 配置<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version></dependency><dependency> <groupId原创 2020-09-01 00:46:24 · 146 阅读 · 0 评论 -
Spring事务机制
事务事务是一个由有限操作集合组成的逻辑单元。事务操作包含两个目的,数据一致以及操作隔离。数据一致是指事务提交时保证事务内的所有操作都成功完成,并且更改永久生效;事务回滚时,保证能够恢复到事务执行之前的状态。操作隔离则是指多个同时执行的事务之间应该相互独立,互不影响事务属性和行为A C I D 属性原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束隔原创 2021-01-25 18:16:09 · 1735 阅读 · 0 评论 -
Spring实现Controller中方法参数校验
目录前言`JSR303、Hibernate-validation、Spring-validation`之间的关系前言数据的校验是网站一个不可或缺的功能,前端的 js 校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用 http 工具直接向后端请求一些违法数据,服务端的数据校验也是必要的JSR303、Hibernate-validation、Spring-validation之间的关系...原创 2021-05-17 00:10:29 · 9403 阅读 · 0 评论 -
为什么要用IOC和AOP
前言作为一名 Java 开发,对 spring 框架是再熟悉不过的了。spring 支持的控制反转(Inversion of Control,缩写为IOC)和面向切面编程(Aspect-oriented programming,缩写为AOP)早已成为我们的开发习惯,仿佛 Java 开发天生就该如此。人总是会忽略习以为常的事物,所有人都熟练使用 IOC 和 AOP,却鲜有人说得清楚到底为什么要用 IOC 和 AOPspring IOC我们现在假设回到了没有 IOC 的时代,用传统的 servlet 进行原创 2021-02-23 18:50:36 · 245 阅读 · 3 评论 -
Spring源码之bean的解析obtainFreshBeanFactory方法解读
目录前言前言一直以来,只是知道 spring 会解析所有的配置文件(通常我们会放在 resources 目录下),然后将从配置文件中解析到的 bean 定义封装成 BeanDefinition,加载到 IOC 容器中。而不知道其内部是如何解析,执行的,本篇文章将予以揭秘...原创 2021-05-10 16:58:46 · 1014 阅读 · 1 评论 -
Spring源码之bean的销毁registerDisposableBeanIfNecessary方法解读
目录前言`registerDisposableBeanIfNecessary()` 方法概览前言这篇文章是 IOC 容器初始化启动时,抽象类 AbstractAutowireCapableBeanFactory 的 doCreateBean() 方法里面的 registerDisposableBeanIfNecessary() 方法,它是进行 bean 的销毁的方法阅读本篇文章,同时可以参考阅读 spring源码之getBean(获取 bean)方法解读(二) 和 spring aop代理对象的产生原创 2021-05-08 22:48:27 · 895 阅读 · 2 评论 -
Spring AOP源码解读
aop 是什么AOP (Aspect-Oriented Programming,面向切面编程),可以说是 OOP 的补充和完善。OOP 引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP 则显得无能为力。OOP 允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布原创 2021-01-23 23:23:36 · 4323 阅读 · 0 评论 -
Spring源码之getBean(获取 bean)方法(一)解读
目录测试类一个简单的测试类对于 `ApplicationContext` 和 `ClassPathXmlApplicationContext` 类图如下`getBean` 源码解读查看 `AbstractApplicationContext` 中的 `getBean` 方法查看 `AbstractBeanFactory` 的 `doGetBean` 方法看 `doGetBean` 方法的流程图查看 `getSingleton(beanName)` 方法(重点)疑惑问题测试类一个简单的测试类publ原创 2021-04-11 13:17:04 · 2586 阅读 · 0 评论 -
Spring源码之bean的实例化createBeanInstance方法解读
目录前言前言这篇文章是 IOC 容器初始化启动时,抽象类 AbstractAutowireCapableBeanFactory 的 doCreateBean() 方法里面的 createBeanInstance() 方法,顾名思义是 bean 的实例化方法。阅读本篇文章,同时可以参考阅读 spring源码之getBean(获取 bean)方法解读(二) 和 spring aop代理对象的产生(一) 这两篇文章的 doCreateBean() 方法...原创 2021-05-03 15:53:10 · 799 阅读 · 1 评论 -
Spring源码之bean的属性填充populateBean方法解读
目录前言前言这篇文章是 IOC 容器初始化启动时,抽象类 AbstractAutowireCapableBeanFactory 的 doCreateBean() 方法里面的 populateBean() 方法,它进行 bean 的属性填充注入的方法阅读本篇文章,同时可以参考阅读 spring源码之getBean(获取 bean)方法解读(二) 和 spring aop代理对象的产生(一) 这两篇文章的 doCreateBean() 方法...原创 2021-05-03 22:09:28 · 4908 阅读 · 1 评论 -
Spring源码之getBean(获取 bean)方法(二)解读
前言接着上篇博客 spring 源码之 getBean 方法解读 ,在博客最后有个疑问:getBean 的时候总是从单例缓存池(指的是一级缓存 singletonObjects)中拿到了,那么productInfoServiceImpl 这个 bean 是在什么时候初始化的,又在什么时候添加进了单例缓存池(指的是一级缓存 singletonObjects)中呢?public class Test_2 { public static void main(String[] args) {原创 2021-03-25 16:57:09 · 3357 阅读 · 1 评论 -
Spring源码之事务(一)
声明式事务简单示例service 实现类@Servicepublic class ProductInfoServiceImpl implements ProductInfoService { @Autowired private ProductInfoMapper productInfoMapper; @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT) @原创 2021-02-03 23:27:08 · 309 阅读 · 0 评论 -
Spring之AOP代理对象的产生(二)
前言我们接着 spring aop代理对象的产生(一) 来分析 aop 代理对象的产生,上篇文章解读到了 AbstractAutowireCapableBeanFactory 的 initializeBean 方法,我们继续aop 代理对象的产生initializeBean 方法重点关注 applyBeanPostProcessorsAfterInitialization 方法AOP 的原理和实现就在其中,来到了AbstractAutowireCapableBeanFactory的applyBean原创 2021-02-01 18:21:02 · 1093 阅读 · 0 评论 -
Spring中的@Autowired自动装配
一:什么是自动装配自动装配:就是 spring 会在容器中自动的查找,并自动的给 bean 装配及其关联的属性涉及到自动装配Bean的依赖关系时,Spring 有多种处理方式。因此,Spring 提供了 4 种自动装配策略public interface AutowireCapableBeanFactory extends BeanFactory { // 无需自动装配 int AUTOWIRE_NO = 0; // 按名称自动装配 bean 属性 int AUTOWIRE_BY_NAM原创 2020-09-15 23:38:25 · 5985 阅读 · 2 评论