自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 Spring源码学习(十五)-- 事务底层源码解析

今天我们主要来学习一下Spring事务的源码解析,主要讲的是Spring的申明式事务的讲解。申明式事务管理: 基于Spring AOP实现。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。申明式事务管理不需要入侵代码,通过@Transactional就可以进行事务操作,且大部分业务都可以满足,推荐使用。源码解析入口@EnableTransactionManagement工作原理使用EnableTransactionMana

2022-02-12 15:00:35 1404 1

原创 Spring源码学习(十四)-- AOP底层源码解析下

ProxyFactory选择cglib或jdk动态代理原理OrderService target = new OrderService(); ProxyFactory proxyFactory = new ProxyFactory(); proxyFactory.setTarget(target); proxyFactory.setInterfaces(OrderInterface.class); proxyFactory.addAdvice(new MethodIntercepto

2022-02-09 11:00:54 880

原创 Spring源码学习(十三)-- AOP底层源码解析上

首先可以看一下之前关于代理的笔记:代理模式学习笔记_学习笔记-优快云博客动态代理代理模式的解释:为其他对象提供一种代理以控制对这个对象的访问,增强一个类中的某个方法,对程序进行扩展。比如,现在存在一个UserService类:package com.fztx.service;public class UserService { public void test(){ System.out.println("test..."); }}此时,我们new一个UserSe

2022-01-24 16:18:36 665 1

原创 Spring源码学习(十二)--配置类解析(ConfigurationClassPostProcessor)

前言上一篇文章分析Spring启动流程中有一个步骤是执行BeanFactoryPostProcessor,在refresh-->invokeBeanFactoryPostProcessors(beanFactory),该方法中会先执行BeanDefinitionRegistryPostProcessor的postProcessBeanDefinitionRegistry方法,然后执行postProcessBeanFactory方法,其中ConfigurationClassPostProcessor

2021-11-26 18:24:17 1176 1

原创 Spring源码学习(十一)--启动流程

前言通常,我们说的Spring启动,就是构造ApplicationContext对象以及调用refresh()方法的过程。​之前已经在本地编译好了spring源码,也新建了一个子模块用来测试,可以断点一步一步的跟代码。Spring IoC容器的加载过程1.实例化化容器:AnnotationConfigApplicationContext从这里出发:(这里使用的时javaconfig注解的方式,因为设计理念更先进,在对bean定义读取和操作方面使用了BeanDefinitionRegist

2021-11-25 17:34:38 1148 1

原创 Spring源码学习(十)--推断构造方法

Spring推断构造方法

2021-11-23 17:31:51 1677 6

原创 Spring源码学习(九)--循环依赖

什么是循环依赖?很简单,就是A对象依赖了B对象,B对象依赖了A对象。比如:// A依赖了Bclass A{ public B b;}// B依赖了Aclass B{ public A a;}那么循环依赖是个问题吗?如果不考虑Spring,循环依赖并不是问题,因为对象之间相互依赖是很正常的事情。比如A a = new A();B b = new B();a.b = b;b.a = a;这样,A,B就依赖上了。但是,在Spring中循.

2021-11-12 18:02:24 1638 1

原创 Spring源码学习(八)-- 依赖注入源码解析(下)

上篇文章分析了Spring中的自动注入(byName,byType)和@Autowired注解的工作原理以及源码,@Autowired注解依赖注入其中注入点注入,无论是属性注入还是方法注入都有一个相同的方法org.springframework.beans.factory.support.DefaultListableBeanFactory#resolveDependency@NullableObject resolveDependency(DependencyDescriptor desc..

2021-11-09 18:39:44 1494

原创 Spring源码学习(七)-- 依赖注入源码解析(上)

Spring中到底有几种依赖注入的方式?首先分两种:手动注入 自动注入手动注入在XML中定义Bean时,就是手动注入,因为是程序员手动给某个属性指定了值。<bean name="userService" class="com.fztx.service.UserService"> <property name="orderService" ref="orderService"/></bean>上面这种底层是通过set方法进行注入。&lt

2021-11-03 16:33:09 766

原创 Spring源码学习(六)-- Bean的生命周期(下)

前言接上篇Spring源码学习(五)-- Bean的生命周期(上)Spring Bean总体的创建过程如下:在上一篇文章把spring扫描(生成beanDefinition)、合并BeanDefinition,那么接下就是根据BeanDefinition创建spring bean的过程了。上篇文章分析到refresh()方法中finishBeanFactoryInitialization的方法会实例化非懒加载单例bean,继续走到org.springframework.beans..

2021-11-02 15:50:52 553

原创 Spring源码学习(五)-- Bean的生命周期(上)

Spring最重要的功能就是帮助程序员创建对象(也就是IOC),而启动Spring就是为创建Bean对象做准备,所以我们先明白Spring到底是怎么去创建Bean的,也就是先弄明白Bean的生命周期。Bean的生命周期就是指:在Spring中,一个Bean是如何生成的,如何销毁的Bean生命周期流程图:引言首先你要明白一点,Spring Bean总体的创建过程如下:以注解类变成Spring Bean为例,Spring会扫描指定包下面的Java类,然后将其变成beanDefinit

2021-10-29 11:22:39 898 6

原创 Spring源码学习(四)--Spring源码编译(IDEA)

准备工作本示例基于 SpringV5.2.18RELEASE+GradleWapper+jdk1.8.0_101编译环境准备gradle gradle我没有自己单独安装,使用的是GradleWapper中的gradle,当然也可以自己下载idea 2020.1.3idea破解:IDEA2020破解永久使用[激活到2089年,稳呀] - 异常教程jdk8+源码下载进入GitHub - spring-projects/spring-framewor...

2021-10-21 17:33:56 1046

原创 Spring Boot自定义starters

一、简介SpringBoot 最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器),我们通过引入springboot 为我提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能。即使是这样,springboot也不能囊括我们所有的使用场景,往往我们需要自定义starter,来简化我们对springboot的使用。二、如何自定义starter1.实例如何编写自动配置 ?我们参照@WebMvcAutoConfiguration为例,我们看看们需要准备哪些东西,下面

2021-10-20 10:15:04 491

原创 Spring Boot启动原理源码剖析

一、springboot启动原理及相关流程概览springboot是基于spring的新型的轻量级框架,最厉害的地方当属自动配置。那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置二、springboot的启动类入口用过springboot的技术人员很显而易见的两者之间的差别就是视觉上很直观的:springboot有自己独立的启动类(独立程序)@SpringBootApplicationpublic class SpringbootWebApplication {.

2021-10-19 16:32:37 539

原创 Spring Boot集成MyBatis

目录1.整合Durid数据源2.整合MyBatis2.1生成MyBatis代码:2.2 整合Mybatis3.MyBatis自动配置原理1.整合Durid数据源1、引入Jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc&l

2021-10-15 15:21:04 336

原创 Spring Boot与Web开发(下)

目录4.SpringBoot的嵌入式Servlet容器1.嵌入式Servlet容器配置修改2.注册servlet三大组件3.切换其他嵌入式Servlet容器4.嵌入式Servlet容器自动配置原理5.使用外部Servlet容器6.外部Servlet容器启动SpringBoot应用原理5.SpringBoot作为单体Web应用的使用4.SpringBoot的嵌入式Servlet容器Spring 默认的Servlet容器是:Tomcat, 当前SpringBoot 2

2021-10-14 17:24:16 404

原创 Spring Boot与Web开发(中)

目录3.定制SpringMvc的自动配置WebMvcConfigurer 原理json开发jsckson的使用国际化统一异常处理3.定制SpringMvc的自动配置SpringMVC的自动配置类:WebMvcAutoConfiguration1.通过覆盖Bean :在大多数情况,SpringBoot在自动配置中标记了很多@ConditionalOnMissingBean(xxxxxxxxx.class); (意思就是如果容器中没有,当前的@bean才会生效)。 只

2021-10-14 11:30:03 675

原创 Spring Boot与Web开发(上)

1.SpringBoot下的SpringMVC快速使用1.基于restful http接口 的CURDpackage com.springboot.controller;import com.springboot.entity.Result;import com.springboot.entity.User;import com.springboot.service.UserService;import org.springframework.beans.factory.annotati

2021-09-15 16:43:36 1022

原创 Spring源码学习(三)-- 底层架构核心概念解析

前面,我们大概了解了Spring中的一些概念和底层工作流程,这篇是后续看Spring源码所必备的,防止后续看源码的过程中,遇到不会的概念得单独跳出来学习。​BeanDefinitionBeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。比如:class,表示Bean类型 scope,表示Bean作用域,单例或原型等 lazyInit:表示Bean是否是懒加载 initMethodName:表示Bean初始化时要执行的方法 d

2021-09-08 16:29:24 1065

原创 Spring源码学习(二)--手写模拟spring底层原理

通过手写模拟,了解Spring的底层源码启动过程 通过手写模拟,了解BeanDefinition、BeanPostProcessor的概念通过手写模拟,了解Spring解析配置类等底层源码工作流程 通过手写模拟,了解依赖注入,Aware回调等底层源码工作流程通过手写模拟,了解Spring AOP的底层源码工作流程...

2021-09-07 23:26:15 872 4

原创 Spring源码学习(一)--Spring底层核心原理解析

目录Spring中是如何创建一个对象?Bean的创建过程推断构造方法AOP大致流程Spring事务最近在跟视频学习spring源码,将每节课记录下来,以后好来复习。首先把Spring中核心知识点都给大家进行串讲,对Spring的底层有了一个整体的大致了解,比如:Bean的生命周期底层原理 依赖注入底层原理 初始化底层原理 推断构造方法底层原理 AOP底层原理 Spring事务底层原理但都只是大致流程,后续会针对每个流程详细深入的讲解并分析源码实现。先来看看入门

2021-09-07 10:03:19 5516 3

原创 Spring Boot 热部署与日志

1.springboot中devtools热部署1.1 引言为了进一步提高开发效率,springboot为我们提供了全局项目热部署,日后在开发过程中修改了部分代码以及相关配置文件后,不需要每次重启使修改生效,在项目中开启了springboot全局热部署之后只需要在修改之后等待几秒即可使修改生效。1.2 开启热部署1.2.1 项目中引入依赖 <dependency> <groupId>org.springframework.b

2021-09-02 20:09:06 539

原创 Spring Boot的自动配置原理

配置文件到底能写什么?怎么写?自动配置原理;配置文件能配置的属性参照.@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot需要运行这个类的main方法来启动SpringBoot应用;SpringBootApplication@Target(ElementType.TYPE) 设置当前注解可以标记在哪(类、方法等)@Retention(RetentionPolicy.RUNT..

2021-09-02 11:59:30 500 1

原创 Spring Boot的配置文件

1.使用Spring Initializer快速创建Spring Boot项目1、IDEA:使用 Spring Initializer快速创建项目IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;选择我们需要的模块;向导会联网创建Spring Boot项目;新建父工程:新建子模块:后续操作同上子模块的pom文件中的parent要修改为我们之前新建的父工程继承关系-springboot maven...

2021-09-01 16:17:42 5642

原创 Spring Boot 简介及快速搭建

目录1.简介2.Why SpringBoot?2.1微服务3.快速开始 SpringBoot Hello World4.代码说明1.简介SpringBoot它基于Spring4.0设计,是由 Pivotal 公司提供的框架。2014 年 4 月发布 Spring Boot 1.0 基于Spring4.02018 年 3 月 Spring Boot 2.0发布 基于Spring 5.0。SpringBoot 基于 Spring 开发。不仅继承了Spring框

2021-08-31 14:04:02 324

原创 SpringMVC基于注解使用:异常处理

目录1、内置异常处理解析器2、统一异常处理1、内置异常处理解析器在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的。下面将介绍使用Spring MVC统一处理异常的解.

2021-08-30 18:18:18 681

原创 SpringMVC基于注解使用:国际化

目录1、通过浏览器语言设置国际化化2、通过超链接来切换国际化3、国际化类型转换和验证失败的信息4、国际化代码中的内容1、通过浏览器语言设置国际化化在日常工作中,如果你的网站需要给不同语言地区的人进行查看,此时就需要使用国际化的基本操作,springmvc的国际化操作比较容易。login.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix

2021-08-30 15:34:10 744

原创 SpringMVC基于注解使用:拦截器

目录1、Springmvc拦截器1、自定义拦截器2、定义多个拦截器2、拦截器跟过滤器的区别3、使用拦截器实现登录权限拦截1、Springmvc拦截器拦截器采用AOP的设计思想, 它跟过滤器类似, 用来拦截处理方法在之前和之后执行一些跟主业务没有关系的一些公共功能:比如:可以实现:权限控制、日志、异常记录、记录方法执行时间.....SpringMVC提供了拦截器机制,允许运行目标方法之前进行一些拦截工作或者目标方法运行之后进行一下其他相关的处理。自定义的拦截器必须实现.

2021-08-30 11:31:06 3454

原创 SpringMVC基于注解使用:上传&下载

目录1、文件下载1.1、servlet原生下载方式1.2、使用RespsonseEntity可以用来定制响应内容1.3、使用RespsonseEntity实现下载2、文件上传2.1、单文件上传2.2、多文件上传2.3、多文件多线程上传2.4、上传磁盘路径显示图片:1、文件下载1.1、servlet原生下载方式/** * 基于servlet api的文件下载 */ @RequestMapping("/download")

2021-08-30 10:11:41 439

原创 SpringMVC基于注解使用:JSON处理

目录1、SpringMVC的返回JSON数据2、SpringMVC的获取JSON数据1、以@RequestBody接收2、以实体类方式接收3、以Map接收4、以List接收json数据格式回顾:java转换为json 的过程一般会称为 “序列化”json转换为java 的过程一般会称为 “反序列化”Json的属和字符串值 必须要用双引号“” 不能用单引号 java json String "xx

2021-08-27 17:50:08 1616

原创 SpringMVC基于注解使用:类型转换&数据格式化&数据验证

目录类型转换&数据格式化&数据验证1、类型转换器自定义类型转换器测试:2、数据格式化注解类型3、数据校验3.1、原生的表单如何获取错误信息:3.2、Springmvc form标签类型转换&数据格式化&数据验证1、类型转换器在日常的企业开发需求中,我们输入文本框的内容全部都是字符串类型,但是在后端处理的时候我们可以用其他基本类型来接受数据,也可以使用实体类来接受参数,这个是怎么完成的呢?就是通过SpringMVC提供的类型转换器

2021-08-27 16:24:23 1340

原创 SpringMVC基于注解使用:响应处理

目录响应处理1、使用默认内置视图解析器(ViewResolver)2、使用视图控制器3、使用Model,Map,ModelMap传输数据到页面4、使用ModelAndView对象传输数据到页面5、使用session传输数据到页面1.通过servlet api的方式去读写session2.通过springmvc提供的注解方式去读写session6、使用@ModelAttribute来获取请求中的数据7、使用forward实现页面转发8、使用redirect来实现

2021-08-26 17:43:11 731

原创 springmvc 控制器是不是单例的?如果是单例的会出现什么问题?怎么解决?

备注一下Spring MVC中的控制器是不是单例模式?如果是,如何保证线程安全?【SpringMVC】二.SpringMVC控制器是不是单例模式(存在问题,如何解决)

2021-08-26 17:40:19 626

原创 SpringMVC基于注解使用:请求处理

目录请求处理1、请求参数处理1、SpringMVC对请求参数的处理2、乱码问题的解决3、SpringMVC对原生API的支持2、请求映射处理1、@RequestMapping2、@PathVariable3、REST4、静态资源的访问请求处理1、请求参数处理数组接收参数List集合接收参数1、SpringMVC对请求参数的处理在之前的servlet中我们可以通过request.getParameter()来获取请求中的参数,但是在我们编写的

2021-08-26 14:52:13 796

原创 SpringMVC简单介绍及使用

1、回顾MVC三层架构1.1、MVC三层是什么MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。就是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数

2021-08-25 11:12:40 463

原创 Activiti整合Spring

一、Activiti与Spring整合开发 1.1 Activiti与Spring整合的配置1)、在pom.xml文件引入坐标<properties> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> </properties> <dependencies>

2021-08-24 16:44:22 514

原创 Activiti进阶-网关

五、网关 网关用来控制流程的流向 5.1 排他网关ExclusiveGateway 5.1.1 什么是排他网关: 排他网关,用来在流程中实现决策。 当流程执行到这个网关,所有分支都会判断条件是否为true,如果为true则执行该分支,注意:排他网关只会选择一个为true的分支执行。如果有两个分支条件都为true,排他网关会选择id值较小的一条分支去执行。 为什么要用排他网关? 不用排他网关也可以实现分支,如:在连线的condition条件上设置分支条件。 在连线设置cond

2021-08-24 14:44:37 1776

原创 Activiti进阶-组任务

四、组任务 4.1、需求 在流程定义中在任务结点的 assignee 固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn 文件中,如果临 时任务负责人变更则需要修改流程定义,系统可扩展性差。 针对这种情况可以给任务设置多个候选人,可以从候选人中选择参与者来完成任务。 4.2、设置任务候选人 在流程图中任务节点的配置中设置 candidate-users(候选人),多个候选人之间用逗号分开。 查看bpmn文件 <userTask activiti:

2021-08-24 11:08:46 863

原创 Activiti进阶-流程变量

三、流程变量 3.1、什么是流程变量 流程变量在 activiti 中是一个非常重要的角色,流程运转有时需要靠流程变量,业务系统和 activiti 结合时少不了流程变量,流程变量就是 activiti 在管理工作流时根据管理需要而设置的变量。 比如:在出差申请流程流转时如果出差天数大于 3 天则由总经理审核,否则由人事直接审核, 出差天数就可以设置为流程变量,在流程流转时使用。 注意:虽然流程变量中可以存储业务数据可以通过activiti的api查询流程变量从而实现查询业务数据,但是不建议这样

2021-08-24 09:57:43 793

原创 Activiti进阶-个人任务

二、个人任务2.1、分配任务负责人 2.1.1、固定分配 在进行业务流程建模时指定固定的任务负责人, 如图: 并在 properties 视图中,填写 Assignee 项为任务负责人。 2.1.2、表达式分配 由于固定分配方式,任务只管一步一步执行任务,执行到每一个任务将按照 bpmn 的配置去分配任 务负责人。 2.1.2.1、UEL 表达式 Activiti 使用 UEL 表达式, UEL 是 java EE6 规范的一部分, UEL(Unified Express

2021-08-23 15:28:20 610

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除