- 博客(304)
- 收藏
- 关注
原创 工作流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 446
原创 用户认证篇
分为访问令牌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 442
原创 3.如何实现 API 全局异常处理?-web组件篇
在 Spring MVC 中,通过 @ControllerAdvice + @ExceptionHandler 注解,声明将指定类型的异常,转换成对应的 CommonResult 响应。实现的代码,可见 GlobalExceptionHandler类。
2023-11-12 22:16:52 194
原创 2.如何实现API统一响应-web组件篇
在标准的 RESTful API 的定义,是推荐使用 HTTP 响应状态码 (opens new window)作为状态码。
2023-11-12 22:03:25 333
原创 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 176
原创 18-spring 事务
文章目录1. xml和注解配置方式的对象2.spring事务传播特性3. 注解事务的初始化流程4. 创建事务信息流程图5. 事务回滚流程图1. xml和注解配置方式的对象2.spring事务传播特性事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_
2023-10-20 22:12:52 365
原创 17-spring aop调用过程概述
CGLIB$CALLBACK_0的advised对象的targetSource有一个普通对象MyCalculate.
2023-10-20 22:12:17 383
原创 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 411
原创 14-bean创建流程5-初始化和循环依赖
Bean是分为实例化和初始化,可以在实例化之后就把半成品的bean实例暴露,让其他bean引用,后续半成品的bean初始化并不影响其内存地址。
2023-10-20 22:08:18 473
原创 13-bean创建流程4-反射创建bean
SmartInstantiationAwareBeanPostProcessor接口定制构造函数/***/@Nullableif (ctors!= null) {MergedBeanDefinitionPostProcessor接口。
2023-10-15 20:53:51 89
原创 12-bean创建流程3
createBean方法里面的resolveBeforeInstantiation方法,InstantiationAwareBeanPostProcessor接口创建一个代理对象返回。spring创建bean的方式有哪几种。
2023-10-15 20:53:13 94
原创 11-bean创建流程2
单例模式的bean只会被创建一次,IoC容器会缓存该bean实例以供下次使用;原型模式的bean每次都会创建一个全新的bean,IoC容器不会缓存该bean的实例。那么如果现在有一个单例模式的bean引用了一个原型模式的bean呢?如果无特殊处理,则被引用的原型模式的bean也会被缓存,这就违背了原型模式的初衷,这时使用lookup-method注入可以解决该问题。原理是:使用cglib生产代理类,复写方法。
2023-10-15 20:52:26 109
原创 10-bean创建流程1一finishBeanFactoryInitialization(ConfigurableListableBeanFactory
从PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors()的第一个beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false)进入。注意这里的递归调用。
2023-10-15 20:51:47 407
原创 09-消息资源和监听器的初始化
是AbstractApplicationEventMulticaster的内部私有的类,持有applicationListeners和applicationListenerBeans。逻辑很简单,如果beanFactory有多播器,仅打印日志,如果没有则创建SimpleApplicationEventMulticaster多播器。监听器运用到观察者模式。具体可以看:https://refactoringguru.cn/design-patterns/observer。
2023-10-15 20:51:11 81
原创 08-注册BeanPostProcesser
这里提到的重点是代理的创建是在 post-processors的postProcessAfterInitialization方法之后,即初始化之后。registerBeanPostProcessors(beanFactory)的方法过程。允许对新建实例的定制修改,比如检查标记接口或用代理包装他们。见名知意,在bean初始化之前处理bean。在bean初始化之后处理bean。
2023-10-15 20:50:36 346
原创 07-ConfigurationClassPostProces的解析
主要是来解析@Configuration注解的类,比其他BeanFactoryPostProcessor优先执行。
2023-10-15 20:49:35 302
原创 06-spring的beanFactoryPostProcessor的执行
在BeanFactoryPostProcessor执行提前执行,主要用于修改注册BeanDefinition。
2023-10-15 20:47:21 110
原创 05-spring的bean工厂准备工作
直接上代码定义基本类....自定义属性编辑器继承PropertyEditorSupport@Override自定义属性登记员@Overridexml信息。
2023-10-15 20:46:39 128
原创 04-spring配置文件加载过程
XmlBeanDefinitionReader继承AbstractBeanDefinitionReader,AbstractBeanDefinitionReader实现BeanDefinitionReader。注意XmlBeanDefinitionReader的构造函数,beanFactory作为参数传入其构造函数,AbstractBeanDefinitionReader有个成员变量registry, 这就是beanFactory的注册中心。beanFactory的bean注册中心。
2023-10-15 20:45:54 75
原创 03-spring启动流程细节
AbstractApplicationContext#initPropertySources()扩展,子类重写方法即可。注意子类调用父类构造器和子类调用子类其他构造器。读取bean配置信息。
2023-10-15 20:45:07 75
原创 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 72
原创 01-spring源码概述
以上Bean的生命周期只是多数情况下bean的生命周期,实际上Bean的创建不仅仅是反射一种,也有其他方式,比如FactoryBean。在不同的阶段要处理不同的工作,应该怎么办?观察者模式:监听器,监听事件,多播器(广播器)。
2023-10-15 20:43:09 152
原创 mybatis如何生成和执行动态sql
include> 标签由XMLIncludeTransformer.applyIncludes()处理,同时还会处理 标签下的标签和“${}"占位符。作用是引入由标签定义的sql片段,实际在XMLMapperBuilder.sqlElement()解析。在CachingExecutor.query()生成真正待执行的sql。进入getBoundSql(),
2023-08-12 14:53:54 377
原创 Spring Boot如何整合mybatisplus
MapperScannerConfigurer实现了BeanDefinitionRegistryPostProcessor。方法postProcessBeanDefinitionRegistry可以修改beanDefinition信息。这里用MybatisSqlSessionFactoryBean来创建sqlSessionFactory。主要为MapperScannerConfigurer定制beanDefinition。打断点到MybatisMapperRegistry。
2023-08-06 18:42:14 702
原创 Spring Boot如何整合mybatis
MapperScannerConfigurer实现了BeanDefinitionRegistryPostProcessor。方法postProcessBeanDefinitionRegistry可以修改beanDefinition信息。这里还是利用SqlSessionFactoryBean来创建sqlSessionFactory的bean对象。主要是为MapperScannerConfigurer定制bean信息。进入processBeanDefinitions方法。按照代码的执行顺序。
2023-08-06 15:57:27 397
原创 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 926
原创 Java泛型
}类型变量T用括起来,使用大写形式。在java中,使用E表示集合中的元素,K和V表示键和值,T(U,S)表示任意类型。i < length;i ++) {} }
2023-07-29 17:16:55 303
原创 MyBatis基础模块-类型转换模块
执行sql,在PreparedStatement设置参数时,需要把java类型转换成jdbc类型,而从结果集中获取数据时,需要把jdbc类型转换为java类型。所有类型转换器都继承这个接口。
2023-07-26 22:51:14 136
原创 Mybatis基础模块-反射模块
/ 检测该ReflectorFactory是否缓存了Reflector对象 boolean isClassCacheEnabled();// 设置是否缓存Reflector对象 void setClassCacheEnabled(boolean classCacheEnabled);// 创建指定了Class的Reflector对象 Reflector findForClass(Class type);
2023-07-24 21:54:18 90
原创 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 545
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人