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