自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tobebetter9527的博客

To be a better coder!

  • 博客(305)
  • 收藏
  • 关注

原创 How to install JDK on mac

文章目录1. Install JDK on mac2. zshenv, zshrc, zprofile3. 查看java环境变量配置1. Install JDK on macInstallation of the JDK on macOS2. zshenv, zshrc, zprofileHow Do Zsh Configuration Files Work?3. 查看java环境变量配置open Terminal,cd ~ , ls -acat .zshenv

2024-03-31 10:12:49 743

原创 工作流flowable篇

文章目录1. 如何集成flowable框架2. 流程表单2.1 如何实现动态的流程表单2.2 如何实现流程表单的保存2.3 如何实现流程表单的展示?1. 如何集成flowable框架2. 流程表单2.1 如何实现动态的流程表单2.2 如何实现流程表单的保存2.3 如何实现流程表单的展示?

2024-01-21 18:05:23 468

原创 SaaS多租户篇

多租户

2024-01-20 22:25:12 480

原创 Oauth2.0授权篇

文章目录1. 入门1. 入门

2024-01-14 19:11:26 429

原创 功能权限篇

本质:还说要给前端按钮一个确定的id,然后前端根据查询的权限数据判断是否显示按钮。关键点:前端监听路由切换。

2024-01-14 11:54:29 509

原创 数据权限篇

面对复杂多变的需求,硬编码的可复用性差,需要非常大的开发和维护成本。方案二,本质上也是基于mybatis的插件机制。

2023-12-23 22:03:53 482

原创 用户认证篇

分为访问令牌access_token和刷新令牌refresh_token, 分别保存在system_oauth2_access_token和system_oauth2_refresh_token。访问令牌设置的过期时间一般比较短,通常为30min,刷新令牌可以设置很长时间,比如30天。访问令牌快过期,可以用刷新令牌获得一个新的访问令牌。先生成刷新令牌,再生成访问令牌。在前端yudao-ui-admin-vue3里面,看service.ts,拦截请求,在请求header添加访问token。Security

2023-12-23 13:07:27 448

原创 3.如何实现 API 全局异常处理?-web组件篇

在 Spring MVC 中,通过 @ControllerAdvice + @ExceptionHandler 注解,声明将指定类型的异常,转换成对应的 CommonResult 响应。实现的代码,可见 GlobalExceptionHandler类。

2023-11-12 22:16:52 200

原创 2.如何实现API统一响应-web组件篇

在标准的 RESTful API 的定义,是推荐使用 HTTP 响应状态码 (opens new window)作为状态码。

2023-11-12 22:03:25 340

原创 1.如何实现统一的API前缀-web组件篇

两种场景的前缀不同,分别为/admin-api/和/app-api/,都写在一个controller里面,显然比较混乱。分开写在不同的controller是比较好的方案。实现spring-mvc的接口WebMvcConfigurer,定制请求路径的前缀匹配方式。查看组件yudao-spring-boot-starter-web的类YudaoWebAutoConfiguration。系统提供了 2 种类型的用户,分别满足对应的管理后台、用户 App 场景。再来看WebProperties类。

2023-11-05 11:57:28 200

原创 幂等性(防重复提交)

主要用途:防止用户快速双击某个按钮,而前端没有禁用,导致发送两次重复请求。

2023-11-04 23:38:38 266

原创 18-spring 事务

文章目录1. xml和注解配置方式的对象2.spring事务传播特性3. 注解事务的初始化流程4. 创建事务信息流程图5. 事务回滚流程图1. xml和注解配置方式的对象2.spring事务传播特性事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_

2023-10-20 22:12:52 366

原创 17-spring aop调用过程概述

CGLIB$CALLBACK_0的advised对象的targetSource有一个普通对象MyCalculate.

2023-10-20 22:12:17 388

原创 16-spring AOP核心对象的创建

参考官方解释:https://docs.spring.io/spring-framework/docs/5.2.9.RELEASE/spring-framework-reference/core.html#aop-introduction-defn。

2023-10-20 22:11:07 413

原创 15-bean生命周期,循环依赖

文章目录1. bean生命周期1. bean生命周期

2023-10-20 22:09:02 422

原创 14-bean创建流程5-初始化和循环依赖

Bean是分为实例化和初始化,可以在实例化之后就把半成品的bean实例暴露,让其他bean引用,后续半成品的bean初始化并不影响其内存地址。

2023-10-20 22:08:18 476

原创 13-bean创建流程4-反射创建bean

SmartInstantiationAwareBeanPostProcessor接口定制构造函数/***/@Nullableif (ctors!= null) {MergedBeanDefinitionPostProcessor接口。

2023-10-15 20:53:51 92

原创 12-bean创建流程3

createBean方法里面的resolveBeforeInstantiation方法,InstantiationAwareBeanPostProcessor接口创建一个代理对象返回。spring创建bean的方式有哪几种。

2023-10-15 20:53:13 97

原创 11-bean创建流程2

单例模式的bean只会被创建一次,IoC容器会缓存该bean实例以供下次使用;原型模式的bean每次都会创建一个全新的bean,IoC容器不会缓存该bean的实例。那么如果现在有一个单例模式的bean引用了一个原型模式的bean呢?如果无特殊处理,则被引用的原型模式的bean也会被缓存,这就违背了原型模式的初衷,这时使用lookup-method注入可以解决该问题。原理是:使用cglib生产代理类,复写方法。

2023-10-15 20:52:26 111

原创 10-bean创建流程1一finishBeanFactoryInitialization(ConfigurableListableBeanFactory

从PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors()的第一个beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false)进入。注意这里的递归调用。

2023-10-15 20:51:47 410

原创 09-消息资源和监听器的初始化

是AbstractApplicationEventMulticaster的内部私有的类,持有applicationListeners和applicationListenerBeans。逻辑很简单,如果beanFactory有多播器,仅打印日志,如果没有则创建SimpleApplicationEventMulticaster多播器。监听器运用到观察者模式。具体可以看:https://refactoringguru.cn/design-patterns/observer。

2023-10-15 20:51:11 85

原创 08-注册BeanPostProcesser

这里提到的重点是代理的创建是在 post-processors的postProcessAfterInitialization方法之后,即初始化之后。registerBeanPostProcessors(beanFactory)的方法过程。允许对新建实例的定制修改,比如检查标记接口或用代理包装他们。见名知意,在bean初始化之前处理bean。在bean初始化之后处理bean。

2023-10-15 20:50:36 349

原创 07-ConfigurationClassPostProces的解析

主要是来解析@Configuration注解的类,比其他BeanFactoryPostProcessor优先执行。

2023-10-15 20:49:35 307

原创 06-spring的beanFactoryPostProcessor的执行

在BeanFactoryPostProcessor执行提前执行,主要用于修改注册BeanDefinition。

2023-10-15 20:47:21 111

原创 05-spring的bean工厂准备工作

直接上代码定义基本类....自定义属性编辑器继承PropertyEditorSupport@Override自定义属性登记员@Overridexml信息。

2023-10-15 20:46:39 131

原创 04-spring配置文件加载过程

XmlBeanDefinitionReader继承AbstractBeanDefinitionReader,AbstractBeanDefinitionReader实现BeanDefinitionReader。注意XmlBeanDefinitionReader的构造函数,beanFactory作为参数传入其构造函数,AbstractBeanDefinitionReader有个成员变量registry, 这就是beanFactory的注册中心。beanFactory的bean注册中心。

2023-10-15 20:45:54 76

原创 03-spring启动流程细节

AbstractApplicationContext#initPropertySources()扩展,子类重写方法即可。注意子类调用父类构造器和子类调用子类其他构造器。读取bean配置信息。

2023-10-15 20:45:07 78

原创 02-spring源码概述-debug流程

文章目录1. 两个主要ApplicationContext的类继承结构图1.1 ClassPathXmlApplicationContext1.2 ClassPathXmlApplicationContext2. DefaultListableBeanFactory类继承结构图1. 两个主要ApplicationContext的类继承结构图1.1 ClassPathXmlApplicationContext1.2 ClassPathXmlApplicationContext2. DefaultL

2023-10-15 20:44:01 73

原创 01-spring源码概述

以上Bean的生命周期只是多数情况下bean的生命周期,实际上Bean的创建不仅仅是反射一种,也有其他方式,比如FactoryBean。在不同的阶段要处理不同的工作,应该怎么办?观察者模式:监听器,监听事件,多播器(广播器)。

2023-10-15 20:43:09 155

原创 0-spring源码开班典礼--学习源码的方法论

这几项内容,设计模式需要比较熟,其他可以后续慢慢补。

2023-10-15 20:40:59 180

原创 Rachel‘s English - speaking

link:linklinklinklink

2023-10-14 09:32:26 74

原创 mybatis如何生成和执行动态sql

include> 标签由XMLIncludeTransformer.applyIncludes()处理,同时还会处理 标签下的标签和“${}"占位符。作用是引入由标签定义的sql片段,实际在XMLMapperBuilder.sqlElement()解析。在CachingExecutor.query()生成真正待执行的sql。进入getBoundSql(),

2023-08-12 14:53:54 422

原创 Optional的妙用-如何优雅的不写if

摘自mybatis的代码片段。

2023-08-12 11:38:27 40

原创 Spring Boot如何整合mybatisplus

MapperScannerConfigurer实现了BeanDefinitionRegistryPostProcessor。方法postProcessBeanDefinitionRegistry可以修改beanDefinition信息。这里用MybatisSqlSessionFactoryBean来创建sqlSessionFactory。主要为MapperScannerConfigurer定制beanDefinition。打断点到MybatisMapperRegistry。

2023-08-06 18:42:14 709

原创 Spring Boot如何整合mybatis

MapperScannerConfigurer实现了BeanDefinitionRegistryPostProcessor。方法postProcessBeanDefinitionRegistry可以修改beanDefinition信息。这里还是利用SqlSessionFactoryBean来创建sqlSessionFactory的bean对象。主要是为MapperScannerConfigurer定制bean信息。进入processBeanDefinitions方法。按照代码的执行顺序。

2023-08-06 15:57:27 398

原创 Mybatis插件

**// 执行拦截逻辑的方法 Object intercept(Invocation invocation) throws Throwable;// 决定是否触发 intercept()方法 default Object plugin(Object target) {} // 根据配置 初始化 Intercept 对象 default void setProperties(Properties properties) {// NOP } }定义一个实现类。/**

2023-07-30 21:56:57 929

原创 Java泛型

}类型变量T用括起来,使用大写形式。在java中,使用E表示集合中的元素,K和V表示键和值,T(U,S)表示任意类型。i < length;i ++) {} }

2023-07-29 17:16:55 309

原创 MyBatis基础模块-类型转换模块

执行sql,在PreparedStatement设置参数时,需要把java类型转换成jdbc类型,而从结果集中获取数据时,需要把jdbc类型转换为java类型。所有类型转换器都继承这个接口。

2023-07-26 22:51:14 138

原创 Mybatis基础模块-反射模块

/ 检测该ReflectorFactory是否缓存了Reflector对象 boolean isClassCacheEnabled();// 设置是否缓存Reflector对象 void setClassCacheEnabled(boolean classCacheEnabled);// 创建指定了Class的Reflector对象 Reflector findForClass(Class type);

2023-07-24 21:54:18 91

原创 Mybatis基础模块-日志管理

配置值包括:SLF4J , LOG4J(deprecated since 3.5.9) , LOG4J2 , JDK_LOGGING |,COMMONS_LOGGING , STDOUT_LOGGING , NO_LOGGING。Java的日志框架有很多,Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,接口不尽相同,Mybatis为了统一匹配这些框架,使用到了适配器模式。问题:mybatis是如何选择日志框架的。

2023-07-23 20:19:56 557

空空如也

空空如也

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

TA关注的人

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