├── .gitattributes ├── .github └── workflows │ ├── compress.yml │ └── sync.yml ├── .gitignore ├── LICENSE ├── README.md ├── docs ├── Dubbo │ ├── RPC │ │ ├── Dubbo协议.md │ │ ├── Hessian协议.md │ │ ├── Protocol组件.md │ │ ├── Proxy组件.md │ │ └── RPC模块简析.md │ ├── SPI │ │ └── Dubbo与Java的SPI机制.md │ ├── architectureDesign │ │ └── Dubbo整体架构.md │ ├── cluster │ │ ├── Dubbo集群模块简析.md │ │ ├── mock与服务降级.md │ │ ├── 负载均衡.md │ │ └── 集群容错.md │ ├── registry │ │ ├── Dubbo注册中心模块简析.md │ │ └── 注册中心的Zookeeper实现.md │ └── remote │ │ ├── Buffer组件.md │ │ ├── Dubbo远程通信模块简析.md │ │ ├── Exchange组件.md │ │ ├── Transport组件.md │ │ ├── 基于HTTP实现远程通信.md │ │ └── 基于Netty实现远程通信.md ├── JDK │ ├── basic │ │ ├── String.md │ │ ├── Thread.md │ │ └── ThreadLocal.md │ ├── collection │ │ ├── ArrayList.md │ │ ├── ConcurrentHashMap.md │ │ ├── HashMap.md │ │ ├── HashSet.md │ │ ├── LinkedHashMap.md │ │ ├── LinkedList.md │ │ └── TreeSet.md │ └── concurrentCoding │ │ ├── CountdownLatch.md │ │ ├── CyclicBarrier.md │ │ ├── Executor线程池组件.md │ │ ├── JUC并发包UML全量类图.md │ │ ├── Lock锁组件.md │ │ ├── Semaphore.md │ │ └── 详解AbstractQueuedSynchronizer.md ├── LearningExperience │ ├── ConcurrentProgramming │ │ └── Java并发编程在各主流框架中的应用.md │ ├── DesignPattern │ │ ├── 从Spring及Mybatis框架源码中学习设计模式(创建型).md │ │ ├── 从Spring及Mybatis框架源码中学习设计模式(结构型).md │ │ ├── 从Spring及Mybatis框架源码中学习设计模式(行为型).md │ │ └── 从框架源码中学习设计模式的感悟.md │ ├── EncodingSpecification │ │ └── 一个程序员的自我修养.md │ └── PersonalExperience │ │ └── 初级开发者应该从spring源码中学什么.md ├── Mybatis │ ├── 基础支持层 │ │ ├── 1、反射工具箱和TypeHandler系列.md │ │ ├── 2、DataSource及Transaction模块.md │ │ ├── 3、binding模块.md │ │ ├── 4、缓存模块.md │ │ ├── Mybatis-Cache.md │ │ ├── Mybatis-Reflector.md │ │ └── Mybatis-log.md │ └── 核心处理层 │ │ ├── 1、MyBatis初始化.md │ │ ├── 2、SqlNode和SqlSource.md │ │ ├── 3、ResultSetHandler.md │ │ ├── 4、StatementHandler.md │ │ ├── 5、Executor组件.md │ │ ├── 6、SqlSession组件.md │ │ ├── Mybatis-Alias.md │ │ ├── Mybatis-Cursor.md │ │ ├── Mybatis-DataSource.md │ │ ├── Mybatis-DyanmicSqlSourcce.md │ │ ├── Mybatis-MapperMethod.md │ │ ├── Mybatis-MetaObject.md │ │ ├── Mybatis-MethodSignature.md │ │ ├── Mybatis-ObjectWrapper.md │ │ ├── Mybatis-ParamNameResolver.md │ │ ├── Mybatis-SqlCommand.md │ │ └── Mybats-GenericTokenParser.md ├── Netty │ ├── AdvancedFeaturesOfNetty │ │ ├── Netty架构设计.md │ │ ├── Netty高可靠性设计.md │ │ └── Netty高性能之道.md │ ├── IOTechnologyBase │ │ ├── IO模型.md │ │ ├── Selector、SelectionKey及Channel组件.md │ │ ├── 四种IO编程及对比.md │ │ ├── 把被说烂的BIO、NIO、AIO再从头到尾扯一遍.md │ │ └── 详解selector、poll和epoll.md │ ├── Netty主要组件源码分析 │ │ ├── ByteBuf组件.md │ │ ├── ChannelPipeline和ChannelHandler组件.md │ │ ├── Channel和Unsafe组件.md │ │ ├── EventLoop组件.md │ │ └── Future和Promise组件.md │ ├── Netty多协议开发 │ │ ├── 基于HTTP协议的Netty开发.md │ │ ├── 基于WebSocket协议的Netty开发.md │ │ └── 基于自定义协议的Netty开发.md │ ├── Netty技术细节源码分析 │ │ ├── ByteBuf的内存泄漏原因与检测原理.md │ │ ├── FastThreadLocal源码分析.md │ │ ├── HashedWheelTimer&schedule.md │ │ ├── HashedWheelTimer时间轮原理分析.md │ │ ├── MpscLinkedQueue队列原理分析.md │ │ ├── Recycler对象池原理分析.md │ │ ├── 内存池之PoolChunk设计与实现.md │ │ └── 内存池之从内存池申请内存.md │ ├── Netty编解码 │ │ └── Java序列化缺点与主流编解码框架.md │ ├── TCP粘拆包 │ │ └── TCP粘拆包问题及Netty中的解决方案.md │ └── 基于Netty开发服务端及客户端 │ │ ├── 基于Netty的客户端开发.md │ │ └── 基于Netty的服务端开发.md ├── Redis │ ├── Redis.md │ └── redis-sds.md ├── Sentinel │ ├── Sentinel底层LongAdder的计数实现.md │ ├── Sentinel时间窗口的实现.md │ └── Sentinel限流算法的实现.md ├── Spring │ ├── AOP │ │ ├── AOP源码实现及分析.md │ │ ├── JDK动态代理的实现原理解析.md │ │ └── Spring-Aop如何生效.md │ ├── IoC │ │ ├── 1、BeanDefinition的资源定位过程.md │ │ ├── 2、将bean解析封装成BeanDefinition.md │ │ ├── 3、将BeanDefinition注册进IoC容器.md │ │ ├── 4、依赖注入(DI).md │ │ ├── BeanFactoryPostProcessor.md │ │ ├── BeanPostProcessor.md │ │ └── 循环依赖.md │ ├── JDBC │ │ └── Spring-jdbc.md │ ├── RMI │ │ └── Spring-RMI.md │ ├── Spring5新特性 │ │ └── Spring-spring-components.md │ ├── SpringMVC │ │ ├── IoC容器在Web环境中的启动.md │ │ ├── SpringMVC-CROS.md │ │ ├── SpringMVC的设计与实现.md │ │ └── 温习一下servlet.md │ ├── SpringTransaction │ │ ├── Spring与事务处理.md │ │ ├── Spring事务处理的设计与实现.md │ │ ├── Spring事务管理器的设计与实现.md │ │ └── Spring声明式事务处理.md │ ├── Spring整体脉络 │ │ └── 16张图解锁Spring的整体脉络.md │ ├── Spring源码故事(瞎编版) │ │ └── 面筋哥IoC容器的一天(上).md │ ├── TX │ │ └── Spring-transaction.md │ ├── clazz │ │ ├── PlaceholderResolver │ │ │ ├── Spring-PlaceholderResolver.md │ │ │ ├── Spring-PropertyPlaceholderConfigurerResolver.md │ │ │ ├── Spring-ServletContextPlaceholderResolver.md │ │ │ ├── Spring-SystemPropertyPlaceholderResolver.md │ │ │ └── images │ │ │ │ └── PropertyPlaceholderConfigurerResolver.png │ │ ├── PropertySource │ │ │ ├── Spring-CommandLinePropertySource.md │ │ │ ├── Spring-ComparisonPropertySource.md │ │ │ ├── Spring-CompositePropertySource.md │ │ │ ├── Spring-EnumerablePropertySource.md │ │ │ ├── Spring-MapPropertySource.md │ │ │ ├── Spring-MockPropertySource.md │ │ │ ├── Spring-PropertiesPropertySource.md │ │ │ ├── Spring-ResourcePropertySource.md │ │ │ ├── Spring-ServletConfigPropertySource.md │ │ │ ├── Spring-ServletContextPropertySource.md │ │ │ ├── Spring-SimpleCommandLineArgsParser.md │ │ │ ├── Spring-SimpleCommandLinePropertySource.md │ │ │ └── Spring-StubPropertySource.md │ │ ├── Spring-AnnotationUtils.md │ │ ├── Spring-ApplicationListener.md │ │ ├── Spring-BeanDefinitionParserDelegate.md │ │ ├── Spring-BeanDefinitionReaderUtils.md │ │ ├── Spring-BeanFactoryPostProcessor.md │ │ ├── Spring-BeanNameGenerator.md │ │ ├── Spring-Conditional.md │ │ ├── Spring-Custom-attribute-resolver.md │ │ ├── Spring-Custom-label-resolution.md │ │ ├── Spring-DefaultSingletonBeanRegistry.md │ │ ├── Spring-EntityResolver.md │ │ ├── Spring-Import.md │ │ ├── Spring-MessageSource.md │ │ ├── Spring-Metadata.md │ │ ├── Spring-MethodOverride.md │ │ ├── Spring-MultiValueMap.md │ │ ├── Spring-OrderComparator.md │ │ ├── Spring-OrderUtils.md │ │ ├── Spring-Property.md │ │ ├── Spring-PropertyPlaceholderHelper.md │ │ ├── Spring-PropertySources.md │ │ ├── Spring-Scheduling.md │ │ ├── Spring-SimpleAliasRegistry.md │ │ ├── Spring-SpringFactoriesLoader.md │ │ ├── Spring-StopWatch.md │ │ ├── Spring-SystemPropertyUtils.md │ │ ├── Spring-beanFactory.md │ │ ├── Spring-scan.md │ │ └── format │ │ │ ├── AnnotationFormatterFactory │ │ │ └── Spring-DateTimeFormatAnnotationFormatterFactory.md │ │ │ ├── Parser │ │ │ └── Spring-DateTimeParser.md │ │ │ ├── Printer │ │ │ └── Spring-MillisecondInstantPrinter.md │ │ │ ├── Spring-AnnotationFormatterFactory.md │ │ │ ├── Spring-Formatter.md │ │ │ ├── Spring-Parser.md │ │ │ └── Spring-Printer.md │ ├── message │ │ ├── Spring-EnableJms.md │ │ ├── Spring-JmsTemplate.md │ │ └── Spring-MessageConverter.md │ └── mvc │ │ ├── Spring-MVC-HandlerMapping.md │ │ └── Spring-mvc-MappingRegistry.md ├── SpringBoot │ ├── Spring-Boot-Run.md │ ├── SpringBoot-ConditionalOnBean.md │ ├── SpringBoot-ConfigurationProperties.md │ ├── SpringBoot-LogSystem.md │ ├── SpringBoot-application-load.md │ └── SpringBoot-自动装配.md ├── SpringSecurity │ ├── SpringSecurity自定义用户认证.md │ └── SpringSecurity请求全过程解析.md ├── Tomcat │ ├── servlet-api源码赏析.md │ ├── servlet容器详解.md │ ├── 一个简单的Web服务器代码设计.md │ └── 一个简单的servlet容器代码设计.md ├── nacos │ └── nacos-discovery.md └── rocketmq │ ├── rocketmq-commitlog.md │ ├── rocketmq-consume-message-process.md │ ├── rocketmq-consumequeue.md │ ├── rocketmq-consumer-start.md │ ├── rocketmq-indexfile.md │ ├── rocketmq-mappedfile-detail.md │ ├── rocketmq-nameserver-broker.md │ ├── rocketmq-producer-start.md │ ├── rocketmq-pullmessage-processor.md │ ├── rocketmq-pullmessage.md │ ├── rocketmq-send-message.md │ └── rocketmq-send-store.md ├── images ├── ConcurrentProgramming │ └── 线程池流程.png ├── DesignPattern │ ├── 建造者模式类图.png │ ├── 策略模式类图.png │ ├── 装饰器模式类图.png │ ├── 观察者模式类图.png │ └── 责任链模式.png ├── Dubbo │ ├── Dubbo工作原理图.png │ ├── Dubbo整体架构图.png │ ├── RegistryFactory组件类图.png │ ├── Registry组件类图.png │ ├── SPI组件目录结构.png │ ├── com.alibaba.dubbo.rpc.cluster包目录.png │ ├── dubbo-cluster模块工程结构.png │ ├── dubbo-registry-zookeeper模块工程结构图.png │ ├── dubbo-registry模块结构图.png │ ├── dubbo-remoting-api的项目结构.png │ ├── dubbo-remoting的工程结构.png │ ├── dubbo注册中心在zookeeper中的结构.png │ ├── dubbo项目结构.png │ ├── 一致性hash算法1.png │ ├── 一致性hash算法2.png │ └── 一致性hash算法3.png ├── JDK1.8 │ ├── JUC全量UML地图.png │ ├── JUC的locks包.png │ ├── JUC锁组件类图.png │ ├── ThreadLocal原理.png │ ├── ThreadStatusChange.png │ ├── arrayList删除元素的过程.png │ ├── arraylist的add方法.png │ └── 线程池组件类图.png ├── Netty │ ├── BIO通信模型.png │ ├── Buffer组件类图.png │ ├── ChannelHandler组件.png │ ├── ChannelPipeline的调度相关方法.png │ ├── ChannelPipeline责任链事件处理过程.png │ ├── Channel组件.png │ ├── Channel组件类图.png │ ├── IO复用模型.png │ ├── NIO客户端序列图.png │ ├── NIO服务端序列图.png │ ├── Netty串行化设计工作原理.png │ ├── Netty服务端创建时序图.png │ ├── Netty的Channel组件.png │ ├── Netty逻辑架构图.png │ ├── NioServerSocketChannel的ChannelPipeline.png │ ├── Selector和SelectionKey和Channel关系图.png │ ├── ServerBootstrap的Handler模型.png │ ├── TCP粘包拆包问题.png │ ├── image_1595751597062.png │ ├── image_1595752125587.png │ ├── image_1595756711656.png │ ├── image_1595756928493.png │ ├── image_1595757035360.png │ ├── image_1595757110003.png │ ├── image_1595757328715.png │ ├── image_1595758329809.png │ ├── 伪异步IO通信模型.png │ ├── 信号驱动IO模型.png │ ├── 四种IO模型的功能特性对比图.png │ ├── 基于Netty创建客户端时序图.png │ ├── 异步IO模型.png │ ├── 数据在客户端及服务器之间的整体IO流程.png │ ├── 阻塞IO模型.png │ └── 非阻塞IO模型.png ├── SpringBoot │ ├── image-20200318080601725.png │ ├── image-20200318080901881.png │ ├── image-20200318081112670.png │ ├── image-20200318081322781.png │ ├── image-20200318081352639.png │ ├── image-20200318081458019.png │ ├── image-20200318085243888.png │ ├── image-20200318090128983.png │ ├── image-20200318090312626.png │ ├── image-20200318090935285.png │ ├── image-20200318091558233.png │ ├── image-20200318092027020.png │ ├── image-20200319082131146.png │ ├── image-20200319082544653.png │ ├── image-20200319083048849.png │ ├── image-20200319083140225.png │ ├── image-20200319083345067.png │ ├── image-20200319084141748.png │ ├── image-20200319084151997.png │ ├── image-20200319084357652.png │ ├── image-20200319084902957.png │ ├── image-20200319085446640.png │ ├── image-20200319090446231.png │ ├── image-20200320150642022.png │ ├── image-20200320160423991.png │ ├── image-20200320162835665.png │ ├── image-20200320163001728.png │ ├── image-20200320163806852.png │ ├── image-20200320164145286.png │ ├── image-20200320171138431.png │ ├── image-20200320171734270.png │ ├── image-20200323080611527.png │ ├── image-20200323081009823.png │ ├── image-20200323081903145.png │ ├── image-20200323082553595.png │ ├── image-20200323083149737.png │ ├── image-20200323083247061.png │ ├── image-20200323083656670.png │ ├── image-20200323084922159.png │ ├── image-20200323094446756.png │ ├── image-20200323095626953.png │ ├── image-20200323104711545.png │ ├── image-20200323104815305.png │ ├── image-20200323105053757.png │ ├── image-20200323105155998.png │ ├── image-20200323105830138.png │ ├── image-20200323110603959.png │ ├── image-20200323112945449.png │ ├── image-20200323115401750.png │ ├── image-20200323115408877.png │ ├── image-20200323115701118.png │ ├── image-20200323115711826.png │ ├── image-20200323134135926.png │ ├── image-20200323134325955.png │ ├── image-20200323144523848.png │ ├── image-20200323151409473.png │ ├── image-20200323154205484.png │ ├── image-20200323161442058.png │ ├── image-20200323161522570.png │ ├── image-20200324132053755.png │ ├── image-20200324133449749.png │ ├── image-20200324133901498.png │ ├── image-20200324134813642.png │ ├── image-20200324134837762.png │ ├── image-20200325085209824.png │ ├── image-20200325085708416.png │ ├── image-20200325090451465.png │ ├── image-20200325090738203.png │ ├── image-20200325090946470.png │ ├── image-20200325091434110.png │ ├── image-20200325093238025.png │ ├── image-20200325093319391.png │ ├── image-20200325094344562.png │ ├── image-20200325094421008.png │ ├── image-20200325095208523.png │ ├── image-20200325100539794.png │ ├── image-20200325101605773.png │ ├── image-20200325102045939.png │ ├── image-20200515150256581.png │ ├── image-20200515160103338.png │ ├── image-20200518111931477.png │ ├── image-20200601170659521.png │ ├── image-20200824085726621.png │ ├── image-20200825084844709.png │ ├── image-20200825092343271.png │ ├── image-20200825140750035.png │ ├── image-20200825141506531.png │ ├── image-20200825142332485.png │ └── image-20200825142418115.png ├── SpringSecurity │ ├── 003ff2fa-022e-47cb-8aa9-343ed7c40c4a.png │ ├── 0879e131-da5f-491e-a153-42770ce8b975.png │ ├── 0a97b011-34ed-4d57-945e-95c8e6bafc8e.png │ ├── 12629a18-56ef-4286-9ab9-c124dc3d6791.png │ ├── 1282014b-fc29-4c2b-9316-9fdd638653c9.png │ ├── 1590bae4-2e3a-4f97-b02d-d918c49cac22.png │ ├── 1840f96a-6a31-4fce-8a98-02fa7fc60fbf.png │ ├── 19f71152-f456-4db7-a1d5-f79aaa37253b.png │ ├── 1b03bdd4-6773-4b39-a664-fdf65d104403.png │ ├── 1e929fec-d1ab-44b5-89bc-6e5ebcda1daf.png │ ├── 25899949-dac3-4873-a2af-7abfe0e97615.png │ ├── 2b54af34-7d68-4f40-8726-d02d18e03dea.png │ ├── 2e5440bc-9488-4213-a030-0d25153bb2ea.png │ ├── 3980e264-c073-456a-b808-715edd85633a.png │ ├── 3ea76980-417d-4c0c-9330-e0bb241c6a47.png │ ├── 42c5125e-0dc2-4c0c-9434-af4a9efd2d5d.png │ ├── 4612c27e-dd9f-4e60-92dc-fc9858496ec5.png │ ├── 476f8954-abe3-4e26-bfe1-8c5b4abbf0e0.png │ ├── 47a7bca4-d858-4cb1-b126-347805b74053.png │ ├── 481b88aa-028d-4392-8c0a-365f1d0e2ae9.png │ ├── 4beaa02f-a93d-4d95-9ad1-0d7213cb0e46.png │ ├── 4c9c302d-2ce0-4b5b-beb6-c76d2e94038f.png │ ├── 4d84fe43-2646-4a6f-a580-f39f6416d02d.png │ ├── 51ba02f0-bae6-4c08-9adf-7ee0f12b05d3.png │ ├── 522574e3-bacc-4794-a17e-492bc2b4457d.png │ ├── 52390725-d87d-42b1-9071-ea21e445e1e6.png │ ├── 558b8b1c-be32-44c4-8d8f-5f0d231741f8.png │ ├── 56ac5128-eab7-4b92-912f-ff50bac68a4f.png │ ├── 5d511c93-3614-40e0-b3c9-9673c573d60f.png │ ├── 6724647c-34ee-4a57-8cfa-b46f57400d14.png │ ├── 68490740-e03c-4353-b5fc-ac99c0cf0435.png │ ├── 6b1aded6-5229-47ba-b192-78a7c2622b8c.png │ ├── 6c58e27d-dd29-48fc-b597-8067e1c97786.png │ ├── 6c72c09b-742c-4415-851a-8ca5292a4969.png │ ├── 6e009bf1-aba3-4b89-8e86-d3d110e0f4a7.png │ ├── 6eca7b58-80f9-4e98-8483-62b4ef751854.png │ ├── 7842f83d-5417-4cb2-bb30-d70f98c3053f.png │ ├── 870891e9-f8ea-4097-98c9-829b1cdcf145.png │ ├── 895afead-ea6b-4ac6-8138-fbe0a223daf9.png │ ├── 8d05ac54-f034-47d4-b750-67b2e3b3cd14.png │ ├── 8dddd63e-c567-4b41-a9d9-8ef8aa6f2a92.png │ ├── 8e1ac9db-5987-484d-abf4-4c6535c60cc6.png │ ├── 8efa0b1c-2b32-4d5b-9655-985374326e10.png │ ├── 90d3e369-510f-45cb-982d-241d2eedb55c.png │ ├── 964ec4a4-6039-4205-8a87-ea2febcc00b6.png │ ├── 97b6f22c-414d-4a16-aa8e-c3deece2f7cd.png │ ├── 9f06c823-645d-413b-8bb6-1d81b8f329ea.png │ ├── a20e06a4-5a43-4edf-bea1-53fc9bc929e9.png │ ├── a5c61feb-ca72-4768-94bd-1b0a8cf8af70.png │ ├── c365e5ab-a7a3-4ebf-8a25-09cd2e049f22.png │ ├── c6a7370c-4afb-4c5d-aa35-ba9c3406b1ed.png │ ├── c7ef78df-c2ab-4f89-b5ad-45561a91ffcc.png │ ├── ccd16b38-d724-4c03-949e-3b6ba03268a9.png │ ├── cd7aee86-66f8-4197-99d1-1c9275e33bee.png │ ├── cd7d6cb9-c6e7-4570-aab8-309adcb15e16.png │ ├── d6bd19a2-08d3-4ba6-921c-5b5f57370a16.jpg │ ├── d6e99143-6207-43a5-8d04-f0c81baa11b4.png │ ├── d9ae84ae-d60c-4d9c-a7fd-cddeb1142f95.png │ ├── e7a1a684-64db-41d0-a5c0-d9a841d86cc1.png │ ├── eb7a5916-4049-4682-9a11-10f1f1f94c74.png │ ├── ec39a9f6-c97d-4b7d-8843-d20358c1d194.png │ ├── ec796a9b-7c65-49a2-9f9f-7685af7bd57b.png │ ├── ed65fd2a-8a9f-4808-bc16-36128b4af47a.png │ ├── ef28372b-de89-46ff-8679-8b8feca04a7a.png │ ├── f045b025-bd97-4222-8a02-51634be6745b.png │ ├── fb22f2ca-3d9a-420f-b77a-f9c0f737d9ad.png │ ├── fcdab503-2735-46bd-a5b6-226dc348e78c.png │ ├── image-20210811091508157.png │ ├── image-20210811091633434.png │ ├── image-20210811091659121.png │ ├── image-20210811091719470.png │ ├── image-20210811091755498.png │ ├── image-20210811091815473.png │ ├── image-20210811091833065.png │ └── image-20210811092048784.png ├── Tomcat │ └── Servlet主要类图.png ├── appreciateCode.JPG ├── github-doocs.png ├── mybatis │ ├── 1575890354400.png │ ├── 1575890475839.png │ ├── 1575891988804.png │ ├── 1575892046692.png │ ├── 1575892167982.png │ ├── 1575892414120.png │ ├── 1575892511471.png │ ├── 1575892645405.png │ ├── 1575892687076.png │ ├── 1575892763661.png │ ├── 1575894218362.png │ ├── 1576027453035.png │ ├── 1576027589468.png │ ├── 1576027736912.png │ ├── 1576028186530.png │ ├── 1576028554094.png │ ├── 1576028709743.png │ ├── 1576041628806.png │ ├── 1576041889664.png │ ├── 1576050247445.png │ ├── 1576050482190.png │ ├── 1576050580581.png │ ├── 1576050742205.png │ ├── 1576110788523.png │ ├── 1576111307305.png │ ├── 1576112853347.png │ ├── 1576112946984.png │ ├── 1576113272209.png │ ├── 1576113287640.png │ ├── 1576113345527.png │ ├── 1576113398394.png │ ├── 1576113864895.png │ ├── 1576114794663.png │ ├── 1576114876295.png │ ├── 1576114996613.png │ ├── 1576117177349.png │ ├── 1576117195387.png │ ├── 1576117304942.png │ ├── 1576311527726.png │ ├── 1576311999030.png │ ├── 1576312524112.png │ ├── 1576312612783.png │ ├── 1576312777050.png │ ├── 1576313598939.png │ ├── Cache组件.png │ ├── DefaultSqlSession方法调用栈.png │ ├── image-20191217103309934.png │ ├── image-20191217104008186.png │ ├── image-20191217104450495.png │ ├── image-20191217143939247.png │ ├── image-20191217144453261.png │ ├── image-20191217144739434.png │ ├── image-20191217145051629.png │ ├── image-20191217145607956.png │ ├── image-20191217183853550.png │ ├── image-20191218082628696.png │ ├── image-20191218191512184.png │ ├── image-20191218191550550.png │ ├── image-20191219083223084.png │ ├── image-20191219083344439.png │ ├── image-20191219083354873.png │ ├── image-20191219084455292.png │ ├── image-20191219084943102.png │ ├── image-20191219085131167.png │ ├── image-20191219092442456.png │ ├── image-20191219093043035.png │ ├── image-20191219100446796.png │ ├── image-20191219151245509.png │ ├── image-20191219151247240.png │ ├── image-20191219151408597.png │ ├── image-20191219152254274.png │ ├── image-20191219152502960.png │ ├── image-20191219152655746.png │ ├── image-20191219153341466.png │ ├── image-20191219153553127.png │ ├── image-20191219155129772.png │ ├── image-20191219160832704.png │ ├── image-20191219160908212.png │ ├── image-20191219161555793.png │ ├── image-20191219162258040.png │ ├── image-20191219162402291.png │ ├── image-20191219162506920.png │ ├── image-20191219163628214.png │ ├── image-20191219163640968.png │ ├── image-20191219163957488.png │ ├── image-20191223081023730.png │ ├── image-20191223083610214.png │ ├── image-20191223083732972.png │ ├── image-20191223100956713.png │ └── 数据库连接池流程图.png ├── mybatis连接池获取连接逻辑图.png ├── nacos │ ├── image-20200821111938485.png │ ├── image-20200821132413628.png │ ├── image-20200821133350982.png │ └── image-20200821133445090.png ├── pdf.png ├── qrcode-for-doocs.jpg ├── qrcode-for-yanglbme.jpg ├── repository-template-demo.png ├── spring │ ├── BeanFactory.png │ ├── BeanNameGenerator.png │ ├── DateTimeFormatAnnotationFormatterFactory.png │ ├── Mergeable.png │ ├── MethodOverride.png │ ├── MultiValueMap.png │ ├── MutablePropertyValues-构造.png │ ├── Parser.png │ ├── PropertyPlaceholderConfigurerResolver.png │ ├── PropertySource.png │ ├── PropertyValue.png │ ├── PropertyValues.png │ ├── RootBeanDefinition.png │ ├── SystemPropertyUtils-resolvePlaceholders.png │ ├── TemplateAwareExpressionParser.png │ ├── image-20191231142829639.png │ ├── image-20191231162505748.png │ ├── image-20191231164622063.png │ ├── image-20191231165638975.png │ ├── image-20200101093742238.png │ ├── image-20200101100906778.png │ ├── image-20200101111755022.png │ ├── image-20200101155451199.png │ ├── image-20200101155539501.png │ ├── image-20200102083512005.png │ ├── image-20200102085031641.png │ ├── image-20200102091421516.png │ ├── image-20200108081404857.png │ ├── image-20200108081623427.png │ ├── image-20200108082335031.png │ ├── image-20200109084131415.png │ ├── image-20200109085606240.png │ ├── image-20200109090456547.png │ ├── image-20200109090655157.png │ ├── image-20200109091216505.png │ ├── image-20200109092801572.png │ ├── image-20200109093242494.png │ ├── image-20200109094032421.png │ ├── image-20200109094649217.png │ ├── image-20200109094654409.png │ ├── image-20200109150841916.png │ ├── image-20200110093044672.png │ ├── image-20200115083744268.png │ ├── image-20200115084031725.png │ ├── image-20200115093602651.png │ ├── image-20200115105941265.png │ ├── image-20200115141708702.png │ ├── image-20200115143315633.png │ ├── image-20200115143456554.png │ ├── image-20200116085344737.png │ ├── image-20200116085423073.png │ ├── image-20200116085726577.png │ ├── image-20200116085737632.png │ ├── image-20200116085927359.png │ ├── image-20200116092259944.png │ ├── image-20200116141838601.png │ ├── image-20200116141932486.png │ ├── image-20200117104710142.png │ ├── image-20200117110115741.png │ ├── image-20200117110846256.png │ ├── image-20200117111131406.png │ ├── image-20200117133325461.png │ ├── image-20200117141309038.png │ ├── image-20200117141519123.png │ ├── image-20200117142800671.png │ ├── image-20200117143022827.png │ ├── image-20200119085346675.png │ ├── image-20200119085655734.png │ ├── image-20200119101017989.png │ ├── image-20200119101026726.png │ ├── image-20200119101107820.png │ ├── image-20200119101516591.png │ ├── image-20200119141937915.png │ ├── image-20200119143046066.png │ ├── image-20200119144019171.png │ ├── image-20200119145138205.png │ ├── image-20200119163638222.png │ ├── image-20200119164149650.png │ ├── image-20200119164402137.png │ ├── image-20200119164410301.png │ ├── image-20200226082614312.png │ ├── image-20200226083247784.png │ ├── image-20200226084056993.png │ ├── image-20200226084200428.png │ ├── image-20200226084400939.png │ ├── image-20200226084514795.png │ ├── image-20200226084640683.png │ ├── image-20200226084914000.png │ ├── image-20200226084923783.png │ ├── image-20200226085433130.png │ ├── image-20200226085440865.png │ ├── image-20200226085727426.png │ ├── image-20200226085839496.png │ ├── image-20200226090042946.png │ ├── image-20200226090315865.png │ ├── image-20200226090432052.png │ ├── image-20200226090650154.png │ ├── image-20200226090719108.png │ ├── image-20200226090827849.png │ ├── image-20200226090945418.png │ ├── image-20200728094658684.png │ ├── image-20200728105926218.png │ ├── image-20200728133037075.png │ ├── image-20200729090322058.png │ ├── image-20200729144622440.png │ ├── image-20200729145518089.png │ ├── image-20200729145637688.png │ ├── image-20200729145835608.png │ ├── image-20200729160650401.png │ ├── image-20200729161647214.png │ ├── image-20200729162023837.png │ ├── image-20200729163303000.png │ ├── image-20200824094154847.png │ ├── image-20200824104529315.png │ ├── image-20200902102912716.png │ ├── image-20200902103154580.png │ ├── image-20200902105454958.png │ ├── image-20200903091759451.png │ ├── image-20200903111128603.png │ ├── image-20200903150738285.png │ ├── image-20200903150930186.png │ ├── image-20200903153057321.png │ ├── image-20200903153432559.png │ ├── image-20200903153533141.png │ ├── image-20200903153617353.png │ ├── image-20210902072224002.png │ ├── image-20210903080803199.png │ ├── image-20210904161436139.png │ ├── image-20210904161808341.png │ ├── image-20210904162844126.png │ ├── image-20210904174616712.png │ ├── image-20211213224509864.png │ ├── image-20211213224920994.png │ ├── image-20211213225044814.png │ ├── image-20211213225124831.png │ ├── image-20211213225330193.png │ ├── image-20211213225748030.png │ ├── image-20211213225831583.png │ ├── image-20211213225953964.png │ ├── image-20211213230042502.png │ ├── image-20211213230212297.png │ └── 循环依赖.png ├── springMVC │ ├── DispatcherServlet的处理过程.png │ ├── DispatcherServlet的继承关系.png │ ├── HandlerMapping.png │ ├── HandlerMapping组件.png │ ├── SimpleUrlHandlerMapping的继承关系.png │ ├── WebApplicationContext接口的类继承关系.png │ ├── Web容器启动spring应用程序过程图.png │ ├── clazz │ │ ├── image-20200123085741347.png │ │ ├── image-20200123085756168.png │ │ ├── image-20200123085946476.png │ │ ├── image-20200123090442409.png │ │ ├── image-20200123090851644.png │ │ ├── image-20200123091445694.png │ │ ├── image-20200123093032179.png │ │ ├── image-20200123093733129.png │ │ ├── image-20200123094439617.png │ │ └── image-20200918130340555.png │ └── image-20200915135933146.png ├── springTransaction │ ├── PlatformTransactionManager组件的设计.png │ ├── Spring事务处理模块类层次结构.png │ ├── createMainInterceptor()方法的调用链.png │ ├── 实现DataSourceTransactionManager的时序图.png │ └── 调用createTransactionIfNecessary()方法的时序图.png ├── springmessage │ ├── image-20200304085303580.png │ ├── image-20200304092154712.png │ ├── image-20200305085013723.png │ ├── image-20200305085845017.png │ └── image-20200305090846313.png ├── use-this-template-button.png ├── 动态代理原理图1.png └── 动态代理原理图2.png ├── index.html └── vercel.json /.gitattributes: -------------------------------------------------------------------------------- 1 | *.html linguist-language=java -------------------------------------------------------------------------------- /.github/workflows/compress.yml: -------------------------------------------------------------------------------- 1 | name: Compress 2 | 3 | on: 4 | schedule: 5 | - cron: "0 0 * * 3" 6 | workflow_dispatch: 7 | 8 | jobs: 9 | compress: 10 | runs-on: ubuntu-latest 11 | if: github.repository == 'doocs/source-code-hunter' 12 | steps: 13 | - name: Checkout Branch 14 | uses: actions/checkout@v2 15 | 16 | - name: Compress Images 17 | id: calibre 18 | uses: calibreapp/image-actions@main 19 | with: 20 | githubToken: ${{ secrets.GITHUB_TOKEN }} 21 | compressOnly: true 22 | 23 | - name: Commit Files 24 | if: | 25 | steps.calibre.outputs.markdown != '' 26 | run: | 27 | git config --local user.email "szuyanglb@outlook.com" 28 | git config --local user.name "yanglbme" 29 | git commit -m "chore: auto compress images" -a 30 | 31 | - name: Push Changes 32 | if: | 33 | steps.calibre.outputs.markdown != '' 34 | uses: ad-m/github-push-action@master 35 | with: 36 | github_token: ${{ secrets.GITHUB_TOKEN }} -------------------------------------------------------------------------------- /.github/workflows/sync.yml: -------------------------------------------------------------------------------- 1 | name: Sync 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | if: github.repository == 'doocs/source-code-hunter' 11 | steps: 12 | - name: Sync to Gitee 13 | uses: wearerequired/git-mirror-action@master 14 | env: 15 | SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }} 16 | with: 17 | source-repo: git@github.com:doocs/source-code-hunter.git 18 | destination-repo: git@gitee.com:Doocs/source-code-hunter.git 19 | 20 | - name: Build Gitee Pages 21 | uses: yanglbme/gitee-pages-action@main 22 | with: 23 | gitee-username: yanglbme 24 | gitee-password: ${{ secrets.GITEE_PASSWORD }} 25 | gitee-repo: doocs/source-code-hunter 26 | branch: main 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /gradle/wrapper/gradle-wrapper.properties 2 | ##----------Android---------- 3 | # build 4 | *.apk 5 | *.ap_ 6 | *.dex 7 | *.class 8 | bin/ 9 | gen/ 10 | build/ 11 | 12 | # gradle 13 | .gradle/ 14 | gradle-app.setting 15 | !gradle-wrapper.jar 16 | build/ 17 | 18 | local.properties 19 | 20 | ##----------idea---------- 21 | *.iml 22 | .idea/ 23 | *.ipr 24 | *.iws 25 | 26 | # Android Studio Navigation editor temp files 27 | .navigation/ 28 | 29 | ##----------Other---------- 30 | # osx 31 | *~ 32 | .DS_Store 33 | gradle.properties 34 | *.gh 35 | Redis源码分析的内容暂时现放在这个模块下,等中间件的内容多了,再将项目分成框架和中间件两大模块 36 | .vscode -------------------------------------------------------------------------------- /docs/Dubbo/RPC/Dubbo协议.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/RPC/Hessian协议.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/RPC/Protocol组件.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/RPC/Proxy组件.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/RPC/RPC模块简析.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/architectureDesign/Dubbo整体架构.md: -------------------------------------------------------------------------------- 1 | ## 项目结构 2 | 3 | 首先从 GitHub 上 clone 下来 Dubbo 项目,我们根据其中各子项目的项目名,也能大概猜出来各个模块的作用。 4 | 5 | ![avatar](../../../images/Dubbo/dubbo项目结构.png) 6 | 7 | ### dubbo-common 8 | 9 | 公共逻辑子项目,定义了各子项目中 通用的 组件 和 工具类,如:IO、日志、配置处理等。 10 | 11 | ### dubbo-rpc 12 | 13 | 分布式协调服务框架的核心,该模块定义了 RPC 相关的组件,包括 服务发布、服务调用代理、远程调用结果、RPC 调用网络协议,RPC 调用监听器和过滤器等等。该模块提供了默认的 基于 dubbo 协议的实现,还提供了 hessian、http、rmi、及 webservice 等协议的实现,能够满足绝大多数项目的使用需求,另外 还提供了对自定义协议的扩展。 14 | 15 | ### dubbo-registry 16 | 17 | 注册中心子项目,它是 RPC 中 consumer 服务消费者 和 provider 服务提供者 两个重要角色的协调者,该子项目定义了核心的 注册中心组件,提供了 mutilcast、redis 和 zookeeper 等多种方式的注册中心实现,用于不同的使用场景。当然,几乎所有的项目都会选择基于 zookeeper 的实现。 18 | 19 | ### dubbo-remoting 20 | 21 | 远程通讯子项目,RPC 的实现基础就是远程通讯,consmer 要调用 provider 的远程方法必须通过 远程通讯实现。该模块定义了远程传输器、endpoint 终端、客户端、服务端、编码解码器、数据交换、缓冲区、通讯异常定义 等核心组件。他是对于远程网络通讯的抽象,提供了诸如 netty、mina、http 等 协议和技术框架的实现方式。 22 | 23 | ### dubbo-monitor 24 | 25 | 监控子项目,该模块可以监控服务调用的各种信息,例如调用耗时、调用量、调用结果等等,监控中心在调用过程中收集调用的信息,发送到监控服务,在监控服务中可以存储这些信息,对这些数据进行统计分析 和 展示。dubbo 默认提供了一个实现,该实现非常简单,只是作为默认的实现范例,生产环境使用价值不高,往往需要自行实现。 26 | 27 | ### dubbo-container 28 | 29 | 容器子项目,是一个独立的容器,以简单的 Main(类) 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。 30 | 31 | ### dubbo-config 32 | 33 | 配置中心子项目,该模块通过 配置信息,将 dubbo 组件的各个模块整合在一起,给 框架的使用者 提供 可配置的、易用的 分布式服务框架。它定义了面向 dubbo 使用者的各种信息配置,比如服务发布配置、方法发布配置、服务消费配置、应用程序配置、注册中心配置、协议配置、监控配置等等。 34 | 35 | ### dubbo-cluster 36 | 37 | 集群子项目,将多个服务提供方伪装为一个提供方,包括:负载均衡、容错、路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。 38 | 39 | ### dubbo-admin 40 | 41 | 该子项目是一个 web 应用,可以独立部署,用于管理 dubbo 服务,该管理应用可以连接注册中心,读取和更新 注册中心中的内容。 42 | 43 | ## 实现原理 44 | 45 | ### 角色类型与运行原理 46 | 47 | 一个 Dubbo 项目 的角色主要分为如下五种。 48 | 49 | - Provider:服务提供方; 50 | - Consumer:服务消费方; 51 | - Registry:服务注册与发现的注册中心; 52 | - Container:服务运行容器; 53 | - Monitor:统计服务的调用次数、调用时间 的监控中心。 54 | 55 | 其运行原理如下图所示。 56 | 57 | ![avatar](../../../images/Dubbo/Dubbo工作原理图.png) 58 | 59 | ### 工作原理 60 | 61 | 最后总结下其工作原理。 62 | 63 | 1. 服务导出:服务提供方 导出服务,监听服务端口; 64 | 2. 服务注册:服务提供方 注册服务信息到注册中心; 65 | 3. 服务订阅:服务消费方 订阅关注的服务; 66 | 4. 服务发现:当服务地址发生变更时,注册中心通知服务消费端; 67 | 5. 远程服务调用 :根据负载均衡策略 选择服务地址,直接调用; 68 | 6. 监控:监控器 收集和展示 服务提供方、服务消费方之间 的服务调用统计信息 。 69 | -------------------------------------------------------------------------------- /docs/Dubbo/cluster/mock与服务降级.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/cluster/集群容错.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/remote/Buffer组件.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/remote/Exchange组件.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/remote/Transport组件.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/remote/基于HTTP实现远程通信.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Dubbo/remote/基于Netty实现远程通信.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/JDK/collection/LinkedList.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/JDK/collection/TreeSet.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/JDK/concurrentCoding/CountdownLatch.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/JDK/concurrentCoding/CyclicBarrier.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/JDK/concurrentCoding/JUC并发包UML全量类图.md: -------------------------------------------------------------------------------- 1 | 利用 IDEA 整理类图还是蛮不错的,虽然这个功能 BUG 很多。下图是 J.U.C 并发包中所有类组成的类图,源码看多了 再去整理这个图,感觉还是很爽的。 2 | 3 | 根据功能,主要划分了六个部分,其中比较重要的是:线程池及其相关类、并发容器、AQS 与锁与同步工具类、原子类。图可能整理的不够细致,但看着这些类,回想一下其中的源码实现,感觉能侃一天。 4 | 5 | ![avatar](../../../images/JDK1.8/JUC全量UML地图.png) 6 | -------------------------------------------------------------------------------- /docs/LearningExperience/DesignPattern/从框架源码中学习设计模式的感悟.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/LearningExperience/PersonalExperience/初级开发者应该从spring源码中学什么.md: -------------------------------------------------------------------------------- 1 | 作为一名初入职场的开发者,最开始是在逛 B 站刷视频时看到的一个 Spring 源码阅读解析,当时作为一个只知道 SSH 和 CRUD 的 boy,看完后心里就两个词儿“卧槽!牛 B 啊!”而且在去年秋招面试阿里时几乎每次都会被面试官问道“有阅读过什么开源框架吗?”每次我都只能一脸便秘的“嗯…,呃…,啊…,木得…”。这在我心里埋下了一个想法,硬着头皮也要把 Spring 框架源码读一遍,再不济也要看看猪是怎么跑的。 2 | 3 | 从 7 月份开始到现在,利用业余时间完成了 Spring 核心实现(IoC、DI、AOP)及重要组件实现(MVC、事务、JDBC)的源码阅读,并输出相关博客 7 篇,在 Spring 源码上做的详细注解也维护到了个人 GitHub 上,并且将其整合到了开源学习社区 Doocs 上。 4 | 5 | 学习方法的话,我个人比较喜欢先在 B 站上看相关视频,知道怎么读,从哪下口。然后自己买了本 计文柯老师的《Spring 技术内幕》,比对着从 Spring 官网下载的源码包潜心研读。第一遍读,什么都不懂,按图索骥,迷迷糊糊的读完了;第二遍读,就轻车熟路一些咯,“卧槽!原来如此!”的感叹声也络绎不绝;第三遍就能够在整体代码设计和细节实现两个不同的层次上去吸收 Spring 框架的优点咯。 6 | 7 | 这三个月来,阅读 Spring 源码给我带来的提升,主要在专业技能上,但同时也辐射到了我的工作、学习、社交等方面。所以,写这篇文章一方面是应“码农翻身”专栏——刘欣老师的建议,做个经验谈,另一方面也是对自己这三个月学习成果的总结。 8 | 9 | 下面我将分三个部分,谈一谈自己的经验。 10 | 11 | ### 一、工作方面(编码规范、编码能力、设计模式、英文阅读) 12 | 13 | 我所从事的行业做的是 toB 的业务,产品底层平台的框架,代码累累,堆积成山,很多框架都是零几年写的,有的甚至比 Spring 还早。且最近国产化、中台、云服务等概念都在不断落地中,有框架源码的阅读经验,让我能够更从容地面对公司研发的新框架,所维护的产品适配华为高斯数据库时,也更清楚可能是 JDBC 框架中哪里做了特殊处理所导致的问题。当然,最主要的还是对个人编码规范的养成,设计模式的理解应用,英文阅读的能力提升。 14 | 15 | 作为一个初入职场的开发者,编码规范是一个很重要的点,能够让你写出的代码易于维护、阅读和理解。比如,Spring 框架虽然类图体系复杂丰富,但对于类、方法、参数等的命名非常规范;注释注解也非常严谨,注重格式,不会偷懒;对于异常和日志的处理也具有很好的参考价值。比如,之前产品中有遇到一个“将业务表单中的小数从科学计数法转换成普通计数法”(数值过大的 Double 类型数字默认会以科学记数法显示,这是用户无法接受的),研读了复杂的业务代码之后,发现填充到表单前的数据都是 Object 类型的,且丢失了原本类型,无法通过 instanceof 判断应该转成 String 还是 Double,这让我和我的师傅都有点头疼,但 Spring 源码中有过一段以异常捕获机制处理逻辑代码的片段让我灵光乍现,于是我直接将 Object 强转成 Double 并使其不做科学记数法的处理,并将这段代码 try 住,如果没抛异常,就转换成了 Double,抛了异常,就在 catch 中强转成 String。 16 | 17 | 另外,部门也经常会做代码评审,规范的编码不但能够获得同事的认可,一点一滴的细节也会使你的 leader 对你刮目相看。 18 | 19 | 从 IoC 的各顶层接口到中间一层一层的抽象类,再到最后的实现类,这一整套体系的设计和实现,对自己在日常工作中设计某些功能的接口、抽象类和具体实现,都带来了很有价值的参考,设计模式和巧妙的编码技巧也渐渐变得触手可及。比如,设计一个 VO 字段校验功能时,会先定义一个顶层接口,抽象出公共方法,抽象类中有做必输项字段非空校验的,在其中利用模板方法模式对公共功能做具体实现,特性化功能写成抽象方法交由各子类具体实现即可。 20 | 21 | Spring 上很多接口和抽象类,其注解甚至比代码还多,我也经常尝试着去阅读理解这些注释,看看自己的理解与书上的差异,用这种方式来提升英文技术文档的阅读能力,往往更实在一些。 22 | 23 | ### 二、学习方面(学习模式的构建、学以致用) 24 | 25 | 虽然是做技术的,但我也是一个很爱出去耍的人。构建好自己的学习模式能够让你更从容地面对工作和生活。不加班的情况下(所幸部门加班并不太多),我一般会在晚饭之后以及周日时间充电。不管是学技术还是其它什么东西,我认为 以视频为入口,以业界公认的名书继续深入理解,以社交圈的同行或网上社区为输出交流管道,最后持久化到思维导图及学习文档中。Spring 源码学习是我工作之后对自己学习模式构建的一个尝试,构建起这种学习模式之后,个人的工作和生活也变得更加协调平衡,不至于在繁杂忙碌的工作中渐渐丧失学习能力。另外一个比较重要的就是,看 Spring 源码时经常能看到一些与公司框架有异曲同工之妙的编码技巧及实现,比如异常的批量抛出,ConcurrentHashMap 初始化其容量,ThreadLocal 的使用等等,这些都是在读 Spring 源码之前很少会注意或使用的。 26 | 27 | ### 三、社交方面(GitHub、事业部内部授课) 28 | 29 | 对于我来说,既然辛辛苦苦搞懂了一个技术,那就一定得输出自己的理解和经验,装波逼,不然辛辛苦苦几个月,什么产出都没有,过一段时间又把学得给忘了,这和被白嫖有什么区别。而输出知识的话当然要选一些比较优质的平台,比如 GayHub,Doocs 组织和其创建者就是我在 GitHub 上认识的,这些大佬之所以牛逼,能够成事,必然有其原因,加入他们的组织跟着混,准能学到更多我想要的东西(不仅仅是技术方面)。 30 | 31 | 另外,我所在的事业部也有一个“王者荣耀”的学习进阶活动,将自己的学习成果整理成简单、易于理解的内部授课也更容易获得同事的认可与信赖。 32 | 33 | ### 个人建议 34 | 35 | 对于初级开发者学习 Spring 源码来说,我建议配合阿里的《Java 开发手册》一起看,因为编码能力和框架设计能力是需要很长时间的经验积累才能得到大幅提升的,而编码规范则是我们最开始就能做到并做好的事情,也是很多成熟公司越来越重视的东西。另外,阿里的《Java 开发手册》中不少规范都是参考了 Spring 框架的,这也从侧面体现了 Spring 作为业界知名框架,其编码的规范性是深受认可的。 36 | -------------------------------------------------------------------------------- /docs/Mybatis/核心处理层/2、SqlNode和SqlSource.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Mybatis/核心处理层/3、ResultSetHandler.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Mybatis/核心处理层/Mybatis-Alias.md: -------------------------------------------------------------------------------- 1 | # Mybatis Alias 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - Description: 该文介绍 mybatis Alias 源码 5 | - 源码阅读工程: [SourceHot-Mybatis](https://github.com/SourceHot/mybatis-read.git) 6 | - 源码位置 :`org.apache.ibatis.type.Alias` 7 | - 与 Alias 相关的一个方法`org.apache.ibatis.type.TypeAliasRegistry.registerAlias(java.lang.String, java.lang.Class)`(别名注册) 8 | 9 | ```java 10 | /** 11 | * 别名注册, 12 | * typeAliases 是一个map key=>别名,value=>字节码 13 | * 14 | * @param alias 别名名称 15 | * @param value 别名的字节码 16 | */ 17 | public void registerAlias(String alias, Class value) { 18 | if (alias == null) { 19 | throw new TypeException("The parameter alias cannot be null"); 20 | } 21 | // issue #748 22 | String key = alias.toLowerCase(Locale.ENGLISH); 23 | if (typeAliases.containsKey(key) && typeAliases.get(key) != null && !typeAliases.get(key).equals(value)) { 24 | throw new TypeException("The alias '" + alias + "' is already mapped to the value '" + typeAliases.get(key).getName() + "'."); 25 | } 26 | typeAliases.put(key, value); 27 | } 28 | 29 | ``` 30 | 31 | - registerAlias 操作的对象是一个`map`对象 32 | 33 | ```java 34 | 35 | /** 36 | * 别名存放仓库 37 | * 是一个map key=>别名,value=>字节码 38 | */ 39 | private final Map> typeAliases = new HashMap<>(); 40 | ``` 41 | 42 | 不难看出这个对象存放的内容是 别名 -> clazz. 43 | 44 | - 相关注解`Alias` 45 | 46 | ```java 47 | @Documented 48 | @Retention(RetentionPolicy.RUNTIME) 49 | @Target(ElementType.TYPE) 50 | public @interface Alias { 51 | /** 52 | * Return the alias name. 53 | * 54 | * @return the alias name 55 | */ 56 | String value(); 57 | } 58 | ``` 59 | 60 | - 看一下实现方式 61 | 62 | ```java 63 | /** 64 | * 加载{@link Alias} 注解的内容 65 | * 66 | * @param type 67 | */ 68 | public void registerAlias(Class type) { 69 | String alias = type.getSimpleName(); 70 | Alias aliasAnnotation = type.getAnnotation(Alias.class); 71 | if (aliasAnnotation != null) { 72 | // 获取 别名注解 73 | alias = aliasAnnotation.value(); 74 | } 75 | // 转换为 别名,clazz 76 | registerAlias(alias, type); 77 | } 78 | ``` 79 | 80 | 最后回到了`org.apache.ibatis.type.TypeAliasRegistry.registerAlias(java.lang.String, java.lang.Class)`方法 81 | 我们可以简单编写一个测试类 82 | 83 | ```java 84 | @Alias(value = "hc") 85 | public class Hc { 86 | } 87 | 88 | /** 89 | * 对注解 {@link Alias} 的测试用例 90 | */ 91 | @Test 92 | void testAnnotation() { 93 | TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry(); 94 | typeAliasRegistry.registerAlias(Hc.class); 95 | assertEquals("org.apache.ibatis.type.Hc", typeAliasRegistry.resolveAlias("hc").getName()); 96 | } 97 | 98 | ``` 99 | 100 | 其他与`Alias`相关的测试类位于: `org.apache.ibatis.type.TypeAliasRegistryTest` 101 | -------------------------------------------------------------------------------- /docs/Netty/AdvancedFeaturesOfNetty/Netty高可靠性设计.md: -------------------------------------------------------------------------------- 1 | 努力编写中...... 2 | -------------------------------------------------------------------------------- /docs/Netty/IOTechnologyBase/详解selector、poll和epoll.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Netty/Netty主要组件源码分析/ByteBuf组件.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Netty/Netty主要组件源码分析/Future和Promise组件.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Netty/Netty多协议开发/基于HTTP协议的Netty开发.md: -------------------------------------------------------------------------------- 1 | 努力编写中...... 2 | -------------------------------------------------------------------------------- /docs/Netty/Netty多协议开发/基于WebSocket协议的Netty开发.md: -------------------------------------------------------------------------------- 1 | 努力编写中...... 2 | -------------------------------------------------------------------------------- /docs/Netty/Netty多协议开发/基于自定义协议的Netty开发.md: -------------------------------------------------------------------------------- 1 | 努力编写中...... 2 | -------------------------------------------------------------------------------- /docs/Netty/Netty技术细节源码分析/内存池之从内存池申请内存.md: -------------------------------------------------------------------------------- 1 | 该文所涉及的 netty 源码版本为 4.1.16。 2 | 3 | ## Netty 内存池申请内存流程 4 | 5 | 在通过 PooledByteBufAllocator 中向内存池中进行内存申请的时候,最先开始的步骤便是从 PooledByteBufAllocator 中一系列 PoolArena 数组中,选择其中一个 PoolArena 进行分配。 6 | 7 | 这时将会从 PoolArena 数组中选取当前使用量最小的 PoolArena 与当前线程通过 ThreadLocal 进行绑定,之后涉及到内存申请将会直接从这个 PoolArena 进行获取,这个做法在高并发情况下频繁往内存池中进行内存申请的时候可以减少资源竞争,提升效率。 8 | 9 | 在当前线程获取与其绑定的 PoolArena 之后,接下来就是从 PoolArena 中继续申请内存。 10 | 为了适应各种大小的内存场景,PoolArena 的组成也是为了其设计。 11 | 12 | - PoolSubpage 数组 tinySubpagePools:默认情况下,当申请的内存小于 512b 的时候的时候将会从 tinySubpagePools 中直接选择 subPage(内存池中的最小单位)返回 13 | - PoolSubpage 数组 smallSubpagePools:默认情况下,当申请的内存大于 512b 但是小于一个 page 的大小(8kb)的时候,将会从 smallSubpagePools 返回一个 subPage。subPage 是由 poolChunk 中的 page 分配而来。 14 | - PoolChunkList qInit:存储内存利用率 0-25%的 poolChunk 15 | - PoolChunkList q000:存储内存利用率 1-50%的 poolChunk 16 | - PoolChunkList q025:存储内存利用率 25-75%的 poolChunk 17 | - PoolChunkList q050:存储内存利用率 50-100%的 poolChunk 18 | - PoolChunkList q075:存储内存利用率 75-100%的 poolChunk 19 | - PoolChunkList q100:存储内存利用率 100%的 poolChunk、 20 | 当申请的内存大于一个 page(8kb)但又小于一个 poolChunk(2048kb)总大小的时候,将会从各个 PoolChunkList 中尝试获取一个 poolChunk 从中返回。PoolChunkList 是一个由 poolChunk 组成的链表。 21 | 以上几个 PoolChunkList,由符合各个内存利用率的 poolChunk 组成,这几个 PoolChunkList 之间又互相首尾连接组成队列,方便 PoolChunk 在各个队列中根据自己当前的利用率进行转移到对应的位置上。 22 | 最后,当申请的内存大于一个 poolChunk 大小的时候将会直接申请一段非池化的内存返回,并不会占用内存池中的内存空间。 23 | 24 | 最后,到了从 poolChunk 中申请内存的场景,这一部分在[该文](https://github.com/doocs/source-code-hunter/blob/main/docs/Netty/Netty技术细节源码分析/内存池之PoolChunk设计与实现.md)中已经详细说明,这部分也是内存池中获取内存的最后一步。 25 | -------------------------------------------------------------------------------- /docs/Netty/Netty编解码/Java序列化缺点与主流编解码框架.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/docs/Netty/Netty编解码/Java序列化缺点与主流编解码框架.md -------------------------------------------------------------------------------- /docs/Netty/TCP粘拆包/TCP粘拆包问题及Netty中的解决方案.md: -------------------------------------------------------------------------------- 1 | ## TCP 粘包/拆包 2 | 3 | 熟悉 TCP 编程的都知道,无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑 TCP 底层 的 粘包/拆包机制。TCP 粘包/拆包问题,在功能测试时往往不会怎么出现,而一旦并发压力上来,或者发送大报文之后,就很容易出现 粘包 / 拆包问题。如果代码没有考虑,往往就会出现解码错位或者错误,导致程序不能正常工作。本篇博文,我们先简单了解 TCP 粘包/拆包 的基础知识,然后来看看 Netty 是如何解决这个问题的。 4 | 5 | ### TCP 粘包/拆包问题说明 6 | 7 | TCP 是个 “流” 协议,所谓流,就是没有界限的一串数据。TCP 底层 并不了解上层(如 HTTP 协议)业务数据的具体含义,它会根据 TCP 缓冲区 的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被 TCP 拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的 TCP 粘包和拆包问题。我们可以通过下面的示例图,对 TCP 粘包和拆包问题 进行说明。 8 | 9 | ![avatar](../../../images/Netty/TCP粘包拆包问题.png) 10 | 11 | 假设客户端依次发送了两个数据包 D1 和 D2 给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下 4 种情况。 12 | 13 | 1. 服务端分两次读取到了两个独立的数据包,分别是 D1 和 D2,没有粘包和拆包; 14 | 2. 服务端一次接收到了两个数据包,D1 和 D2 粘合在一起,被称为 TCP 粘包; 15 | 3. 服务端分两次读取到了两个数据包,第一次读取到了完整的 D1 包 和 D2 包的部分内容,第二次读取到了 D2 包 的剩余内容,这被称为 TCP 拆包; 16 | 4. 服务端分两次读取到了两个数据包,第一次读取到了 D1 包的部分内容,第二次读取到了 D1 包的剩余内容 和 D2 包的整包。 17 | 18 | 如果此时服务端 TCP 接收滑窗非常小,而 数据包 D1 和 D2 比较大,很有可能会发生第 5 种可能,即服务端分多次才能将 D1 和 D2 包 接收完全,期间发生多次拆包。 19 | 20 | ### TCP 粘包/拆包发生的原因 21 | 22 | 问题产生的原因有三个,分别如下。 23 | 24 | 1. **应用程序 write 写入的字节大小 超出了 套接口发送缓冲区大小;** 25 | 2. 进行 MSS 大小的 TCP 分段; 26 | 3. 以太网帧的 payload 大于 MTU 进行 IP 分片。 27 | 28 | ### 粘拆包问题的解决策略 29 | 30 | 由于底层的 TCP 无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈设计来解决,根据业界的主流协议的解决方案,可以归纳如下。 31 | 32 | 1. 固定消息长度,例如,每个报文的大小为 固定长度 200 字节,如果不够,空位补空格; 33 | 2. 在包尾使用 “回车换行符” 等特殊字符,作为消息结束的标志,例如 FTP 协议,这种方式在文本协议中应用比较广泛; 34 | 3. 将消息分为消息头和消息体,在消息头中定义一个 长度字段 Len 来标识消息的总长度; 35 | 4. 更复杂的应用层协议。 36 | 37 | **注意**:从 TCP 流式设计上来看,TCP 粘包其实是一个伪命题。应用层协议需要自己划分消息的边界。**TCP 粘包问题是因为应用层协议开发者的错误设计导致的,他们忽略了 TCP 协议数据传输的核心机制 — 基于字节流,其本身并不存在数据包的概念。** 所有在 TCP 中传输的数据都是以流的形式进行传输,这就需要应用层协议开发者自行设计消息的边界划分规则。所以粘包总的来说还是以下两点: 38 | 39 | - TCP 协议是面向字节流的协议,它可能会重新分割组合应用层协议的消息到多个数据段中; 40 | - 应用层协议没有定义消息的边界,导致数据的接收方无法按边界拆分粘连的消息。 41 | 42 | 介绍完了 TCP 粘包/拆包 的基础,下面我们来看看 Netty 是如何使用一系列 “半包解码器” 来解决 TCP 粘包/拆包问题的。 43 | 44 | ## 利用 Netty 的解码器 解决 TCP 粘拆包问题 45 | 46 | 根据上面的 粘拆包问题解决策略,Netty 提供了相应的解码器实现。有了这些解码器,用户不需要自己对读取的报文进行人工解码,也不需要考虑 TCP 的粘包和拆包。 47 | 48 | ### LineBasedFrameDecoder 和 StringDecoder 的原理分析 49 | 50 | 为了解决 TCP 粘包 / 拆包 导致的 半包读写问题,Netty 默认提供了多种编解码器用于处理半包,只要能熟练掌握这些类库的使用,TCP 粘拆包问题 从此会变得非常容易,你甚至不需要关心它们,这也是其他 NIO 框架 和 JDK 原生的 NIO API 所无法匹敌的。对于使用者来说,只要将支持半包解码的 Handler 添加到 ChannelPipeline 对象 中即可,不需要写额外的代码,使用起来非常简单。 51 | 52 | ```java 53 | // 示例代码,其中 socketChannel 是一个 SocketChannel对象 54 | socketChannel.pipeline().addLast( new LineBasedFrameDecoder(1024) ); 55 | socketChannel.pipeline().addLast( new StringDecoder() ); 56 | ``` 57 | 58 | LineBasedFrameDecoder 的工作原理是它依次遍历 ByteBuf 中的可读字节,判断看是否有 “\n” 或者 “\r\n”,如果有,就以此位置为结束位置,从可读索引到结束位置区间的字节就组成了一行。它是以换行符为结束标志的解码器,支持携带结束符或者不携带结束符两种解码方式,同时支持配置单行的最大长度。如果连续读取到最大长度后仍然没有发现换行符,就会抛出异常,同时忽略掉之前读到的异常码流。 59 | 60 | StringDecoder 的功能非常简单,就是将接收到的对象转换成字符串,然后继续调用后面的 Handler。LineBasedFrameDecoder + StringDecoder 组合 就是按行切换的文本解码器,它被设计用来支持 TCP 的粘包和拆包。 61 | 62 | ### 其它解码器 63 | 64 | 除了 LineBasedFrameDecoder 以外,还有两个常用的解码器 DelimiterBasedFrameDecoder 和 FixedLengthFrameDecoder,前者能自动对 “以分隔符做结束标志的消息” 进行解码,后者可以自动完成对定长消息的解码。使用方法也和前面的示例代码相同,结合 字符串解码器 StringDecoder,轻松完成对很多消息的自动解码。 65 | -------------------------------------------------------------------------------- /docs/Redis/Redis.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Sentinel/Sentinel底层LongAdder的计数实现.md: -------------------------------------------------------------------------------- 1 | ## LongAdder 的原理 2 | 3 | 在 LongAdder 中,底层通过多个数值进行累加来得到最后的结果。当多个线程对同一个 LongAdder 进行更新的时候,将会对这一些列的集合进行动态更新,以避免多线程之间的资源竞争。当需要得到 LongAdder 的具体的值的时候,将会将一系列的值进行求和作为最后的结果。 4 | 5 | 在高并发的竞争下进行类似指标数据的收集的时候,LongAdder 通常会和 AtomicLong 进行比较,在低竞争的场景下,两者有着相似的性能表现。而当在高并发竞争的场景下,LongAdder 将会表现更高的性能,但是也会伴随更高的内存消耗。 6 | 7 | ## LongAdder 的代码实现 8 | 9 | ```java 10 | transient volatile Cell[] cells; 11 | transient volatile long base; 12 | ``` 13 | 14 | cells 是一个简单的 Cell 数组,当比如通过 LongAdder 的 `add()` 方法进行 LongAdder 内部的数据的更新的时候,将会根据每个线程的一个 hash 值与 cells 数组的长度进行取模而定位,并在定位上的位置进行数据更新。而 base 则是当针对 LongAdder 的数据的更新时,并没有线程竞争的时候,将会直接更新在 base 上,而不需要前面提到的 hash 再定位过程,当 LongAdder 的 `sum()` 方法被调用的时候,将会对 cells 的所有数据进行累加在加上 sum 的值进行返回。 15 | 16 | ```java 17 | public long sum() { 18 | long sum = base; 19 | Cell[] as = cells; 20 | if (as != null) { 21 | int n = as.length; 22 | for (int i = 0; i < n; ++i) { 23 | Cell a = as[i]; 24 | if (a != null) { sum += a.value; } 25 | } 26 | } 27 | return sum; 28 | } 29 | ``` 30 | 31 | 相比 `sum()` 方法,LongAdder 的 `add()` 方法要复杂得多。 32 | 33 | ```java 34 | public void add(long x) { 35 | Cell[] as; 36 | long b, v; 37 | HashCode hc; 38 | Cell a; 39 | int n; 40 | if ((as = cells) != null || !casBase(b = base, b + x)) { 41 | boolean uncontended = true; 42 | int h = (hc = threadHashCode.get()).code; 43 | if (as == null || (n = as.length) < 1 || 44 | (a = as[(n - 1) & h]) == null || 45 | !(uncontended = a.cas(v = a.value, v + x))) { retryUpdate(x, hc, uncontended); } 46 | } 47 | } 48 | ``` 49 | 50 | 在 `add()` 方法的一开始,将会观察 cells 数组是否存在,如果不存在,将会尝试直接通过 `casBase()` 方法在 base 上通过 cas 更新,这是在低并发竞争下的 `add()` 流程,这一流程的前提是对于 LongAdder 的更新并没有遭遇别的线程的并发修改。 51 | 52 | 在当 cells 已经存在,而或者对于 base 的 cas 更新失败,都将会将数据的更新落在 cells 数组之上。首先,每个线程都会在其 ThreadLocal 中生成一个线程专有的随机数,并根据这个随机数与 cells 进行取模,定位到的位置进行 cas 修改。在这个流程下,由于根据线程专有的随机数进行 hash 而定位的流程,尽可能的避免了线程间的资源竞争。但是仍旧可能存在 hash 碰撞而导致两个线程定位到了同一个 cells 槽位的情况,这里就需要通过 `retryUpdate()` 方法进行进一步的解决。 53 | 54 | `retryUpdate()` 方法的代码很长,但是逻辑很清晰,主要分为一下几个流程,其中的主流程是一个死循环,进入 `retryUpdate()` 方法后,将会不断尝试执行主要逻辑,直到对应的逻辑执行完毕: 55 | 56 | 1. 当进入 `retryUpdate()` 的时候,cells 数组还没有创建,将会尝试获取锁并初始化 cells 数组并直接在 cells 数组上进行修改,而别的线程在没创建的情况下进入并获取锁失败,将会直接尝试在 base 上进行更行。 57 | 2. 当进入 `retryUpdate()` 的时候,cells 数组已经创建,但是分配给其的数组槽位的 Cells 还没有进行初始化,那么将会尝试获取锁并对该槽位进行初始化。 58 | 3. 当进入 `retryUpdate()` 的时候,cells 数组已经创建,分配给其的槽位的 Cell 也已经完成了初始化,而是因为所定位到的槽位与别的线程发生了 hash 碰撞,那么将会加锁并扩容 cells 数组,之后对该线程持有的 hash 进行 rehash,在下一轮循环中对新定位的槽位数据进行更新。而别的线程在尝试扩容并获取锁失败的时候,将会直接对自己 rehash 并在下一轮的循环中重新在新的 cells 数组中进行定位更新。 59 | 60 | ## Cell 本身的内存填充 61 | 62 | 最后,提一下 cells 数组中的 Cell 对象。 63 | 64 | ```java 65 | volatile long p0, p1, p2, p3, p4, p5, p6; 66 | volatile long value; 67 | volatile long q0, q1, q2, q3, q4, q5, q6; 68 | ``` 69 | 70 | 每个 Cell 对象中具体存放的 value 前后都由 7 个 long 类型的字段进行内存填充以避免缓存行伪共享而导致的缓存失效。 71 | -------------------------------------------------------------------------------- /docs/Sentinel/Sentinel时间窗口的实现.md: -------------------------------------------------------------------------------- 1 | ## 获取时间窗口的主要流程 2 | 3 | 在 Sentinel 中,主要是通过 LeapArray 类来实现滑动时间窗口的实现和选择。在 sentinel 的这个获取时间窗口并为时间窗口添加指标的过程中,主要的流程为: 4 | 5 | - 根据当前时间选择当前时间应该定位当前时间应该属于的时间窗口 id。 6 | - 根据时间窗口 id 获取时间窗口。这里可能会存在四种情况: 7 | 8 | 1. 时间窗口还未建立,那么将会为此次流量的进入建立一个新的时间窗口返回,并且接下来这个时间窗口内的获取请求都将返回该窗口。 9 | 2. 时间窗口已经建立的情况下,将会直接获取已经存在的符合条件的时间窗口。 10 | 3. 时间窗口可能已经存在,但是当前获取的时间窗口已经过期,需要加锁,并重置当前时间窗口。 11 | 4. 当前进入的时间已经远远落后当前的时间,目标时间窗口已经被 reset 更新成更新的时间窗口,那么将不会返回目标时间窗口,而是返回一个新的空的时间窗口进行统计,这个时间窗口不会再被重复利用。 12 | 13 | 其中的第四个情况表明,sentinel 的滑动时间窗口是有时间范围的,这也是为了尽量减少 sentinel 的所占用的内存,默认情况下 sentinel 的采取的时间长度为 1 分钟和 1 秒钟。这里的实现与 LeapArray 类的结构非常有关系。 14 | 15 | ```java 16 | protected final AtomicReferenceArray> array; 17 | ``` 18 | 19 | 在 LeapArray 中,时间窗口的存放通过一个由 AtomicReferenceArray 实现的 array 来实现。AtomicReferenceArray 支持原子读取和写入,并支持通过 cas 来为指定位置的成员进行更新。在时间窗口的创建并放回 array 的过程中,也就是上文的第一步,就是通过 AtomicReferenceArray 的 `compareAndSet()` 方法来实现,保证并发下的线程安全。并发情况下,通过 cas 更新失败的线程将会回到就绪态,在下一次循环得到已经初始化完成的时间窗口。 20 | 21 | ```java 22 | private final ReentrantLock updateLock = new ReentrantLock(); 23 | ``` 24 | 25 | 此处的 updateLock 是专门在上述的第三个情况来进行加锁的,只有成功得到锁的线程才会对过期的时间窗口进行 reset 操作,其他没有成功获取的线程将不会挂起等待,而是通过 `yield()` 方法回到就绪态,在下一次的循环尝试重新获取该位置的时间窗口。在下一次获取该锁的线程可能已经完成了,那么将会执行上述第二步,否则继续回到就绪态等待下一次循环中再次获取该时间窗口。 26 | 27 | 以上两个数据结构是 LeapArray 类实现时间窗口在高并发下准确获取时间窗口并更新的关键。 28 | 29 | ## 以秒级别的时间窗口举个例子 30 | 31 | 在 sentinel 默认的秒级别时间窗口中,array 的大小为 2,也就是每 500ms 为一个时间窗口的大小。 32 | 33 | 因此当一个线程试图获取一个时间窗口来记录指标数据的时候,将会根据单个时间窗口的时间跨度进行取模,来得到 array 上对应的时间窗口的下标,在这个情况下,将为 0 或者 1,之后计算当前线程时间指标所属的时间窗口的起始时间,以此为依据来判断获取到的时间窗口是过期还是正好所需要的。 34 | 35 | 最后,将会不断循环从 array 尝试获取之前计算得到下标位置处的时间窗口,可能发生的 4 种情况如上所示。在这个情况,如果 cas 失败或是没有尝试获取到更新锁,都不会阻塞或是挂起,而是通过 yield 重新回到就绪态等待下一次循环获取。 36 | 37 | ## 时间窗口本身的线程安全指标更新 38 | 39 | 在指标集合类的实现 MetricBucket 中,通过 LongAdder 类来记录单个指标的值而不是 AtomicLong,LongAdder 内部的核心思路是为各个线程分配一个专属变量进行更新,在需要总数的时候对这一系列进行累加,因此在更新值的时候相比 AtomicLong 会尽可能减少线程间的竞争,达到高效的 metric 更新。 40 | -------------------------------------------------------------------------------- /docs/Spring/SpringMVC/温习一下servlet.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Spring/SpringTransaction/Spring与事务处理.md: -------------------------------------------------------------------------------- 1 | JavaEE 应用中的事务处理是一个重要并且涉及范围很广的领域。事务管理的实现往往涉及并发和数据一致性方面的问题。作为应用平台的 Spring,具有在多种环境中配置和使用事务处理的能力,也就是说通过使用 Spring 的事务组件,可以把事务处理的工作统一起来,并为事务处理提供通用的支持。 2 | 3 | 在涉及单个数据库局部事务的事务处理中,事务的最终实现和数据库的支持是紧密相关的。对局部数据库事务来说,一个事务处理的操作单元往往对应着一系列的数据库操作。数据库产品对这些数据库的 SQL 操作 已经提供了原子性的支持,对 SQL 操作 而言,它的操作结果有两种: 一种是提交成功,数据库操作成功;另一种是回滚,数据库操作不成功,恢复到操作以前的状态。 4 | 5 | 在事务处理中,事务处理单元的设计与相应的业务逻辑设计有很紧密的联系。在很多情况下,一个业务逻辑处理不会只有一个单独的数据库操作,而是有一组数据库操作。在这个处理过程中,首先涉及的是事务处理单元划分的问题,Spring 借助 IoC 容器 的强大配置能力,为应用提供了声明式的事务划分方式,这种声明式的事务处理,为 Spring 应用 使用事务管理提供了统一的方式。有了 Spring 事务管理 的支持,只需要通过一些简单的配置,应用就能完成复杂的事务处理工作,从而为用户使用事务处理提供很大的方便。 6 | 7 | ## 1 Spring 事务处理的设计概览 8 | 9 | Spring 事务处理模块的类层次结构如下图所示。 10 | 11 | ![avatar](../../../images/springTransaction/Spring事务处理模块类层次结构.png) 12 | 13 | 从上图可以看到,Spring 事务处理模块 是通过 AOP 功能 来实现声明式事务处理的,比如事务属性的配置和读取,事务对象的抽象等。因此,在 Spring 事务处理 中,可以通过设计一个 TransactionProxyFactoryBean 来使用 AOP 功能,通过这个 TransactionProxyFactoryBean 可以生成 Proxy 代理对象,在这个代理对象中,通过 TransactionInterceptor 来完成对代理方法的拦截,正是这些 AOP 的拦截功能,将事务处理的功能编织进来。 14 | 15 | 对于具体的事务处理实现,比如事务的生成、提交、回滚、挂起等,由于不同的底层数据库有不同的支持方式,因此,在 Spring 事务处理中,对主要的事务实现做了一个抽象和适配。适配的具体事务处理器包括:对 DataSource 数据源 的事务处理支持,对 Hibernate 数据源 的事务处理支持,对 JDO 数据源 的事务处理支持,对 JPA 和 JTA 等数据源的事务处理支持等。这一系列的事务处理支持,都是通过设计 PlatformTransactionManager、AbstractPlatformTransactionManager 以及一系列具体事务处理器来实现的,而 PlatformTransactionManager 又实现了 TransactionInterceptor 接口,通过这样一个接口实现设计,就把这一系列的事务处理的实现与前面提到的 TransactionProxyFactoryBean 结合起来,从而形成了一个 Spring 声明式事务处理 的设计体系。 16 | 17 | ## 2 Spring 事务处理 的应用场景 18 | 19 | Spring 作为应用平台或框架的设计出发点是支持 POJO 的开发,这点在实现事务处理的时候也不例外。在 Spring 中,它既支持编程式事务管理方式,又支持声明式事务处理方式,在使用 Spring 处理事务的时候,声明式事务处理通常比编程式事务管理更方便些。 20 | 21 | Spring 对应用的支持,一方面,通过声明式事务处理,将事务处理的过程和业务代码分离出来。这种声明方式实际上是通过 AOP 的方式来完成的。显然,Spring 已经把那些通用的事务处理过程抽象出来,并通过 AOP 的方式进行封装,然后用声明式的使用方式交付给客户使用。这样,应用程序可以更简单地管理事务,并且只需要关注事务的处理策略。另一方面,应用在选择数据源时可能会采取不同的方案,当以 Spring 作为平台时,Spring 在应用和具体的数据源之间,搭建一个中间平台,通过这个中间平台,解耦应用和具体数据源之间的绑定,并且,Spring 为常用的数据源的事务处理支持提供了一系列的 TransactionManager。这些 Spring 封装好的 TransactionManager 为应用提供了很大的方便,因为在这些具体事务处理过程中,已经根据底层的实现,封装好了事务处理的设置以及与特定数据源相关的特定事务处理过程,这样应用在使用不同的数据源时,可以做到事务处理的即开即用。这样的另一个好处是,如果应用有其他的数据源事务处理需要, Spring 也提供了一种一致的方式。这种 有机的事务过程抽象 和 具体的事务处理 相结合的设计,是我们在日常的开发中非常需要模仿学习的。 22 | -------------------------------------------------------------------------------- /docs/Spring/Spring源码故事(瞎编版)/面筋哥IoC容器的一天(上).md: -------------------------------------------------------------------------------- 1 | 引言:庞大的代码量让人心生怠倦,有趣的故事让技术也疯狂。 2 | 3 | 大家好,我是 IoC 容器家族的第 17 代传人,我们家族世世代代在 spring 商业街上卖烤面筋,大家都叫我“面筋哥”,另外我爹还给我起了个高大上的英文名字,叫“FileSystemXmlApplicationContext”,但有群臭猴子嫌麻烦,就天天叫我的外号,害得我差点忘了自己的本名。不过无所谓咯,只要生意兴隆,这都是小事。 4 | 5 | 前几天出摊卖烤面筋时,灵感大作,即兴唱了一首“我的烤面筋”,被网友拍下来传到某站上 成了网红,现在我要趁势而上,把自己祖传的烤面筋工艺宣传出去,让我那个臭弟弟“ClassPathXmlApplicationContext”知道,谁才是 IoC 容器的正统传人! 6 | 7 | ## 第一阶段:BeanDefinition 资源定位(Reader,beanDefinitionReader,documentReader) 8 | 9 | 新的一天从 new 开始,但我却还躺在床上各种伸懒腰,毕竟我现在也是个小老板了,很多杂七杂八的活雇几个小弟干就行咯。我拿起我的 iBanana11 看了看商业街董事(某程序员)发的“精选优质面筋批发市场地址”,然后深吸一口气 refresh(),闭上眼 obtainFreshBeanFactory(),气沉丹田 refreshBeanFactory(),大喊一声: 10 | “loadBeanDefinitions()!” 11 | 我虎背熊腰的小弟“beanDefinitionReader” 破门而入,尖声细语地问道: 12 | “老板有何吩咐 ~ ?” 13 | 我起身叮嘱了他几件事后,把自己的联系方式(引用)、面筋批发市场的地址(spring 配置文件地址)交给他,就又躺回去盯着天花板上的钻石吊灯继续发呆。 14 | Reader 家有一对兄妹,哥哥 beanDefinitionReader 虎背熊腰大老粗,却尖声细语;妹妹 documentReader 心灵手巧,可惜比较宅,我们几乎没怎么见过。兄妹俩相互配合把上午的准备工作做了大半。 15 | 不要看我天天躺着,彗星晒屁股了还眯着眼,ta 们兄妹俩在几点几分打个喷嚏我都能算到,毕竟我基因里都写满了“烤面筋工艺完整详细流程”。 16 | 哥哥现在肯定在开着小面包车拿着我给他的地址(locations)到处找面筋等原材料,然后把找到的面筋打包进 Document 对象,拉回来交给妹妹 documentReader 进行精心处理,连同 Document 给她的还有一个“神秘人”的联系方式。 17 | 妹妹会打开 Document 取出其中最大的几个箱子(<beans>、<import>、<alias> 等一级标签),分别进行处理。其中 beans 箱最为重要,里面放满了夜市的主角,烤面筋的核心材料。 18 | 19 | ## 第二阶段:将 bean 解析封装成 BeanDefinitionHolder(BeanDefinitionParserDelegate) 20 | 21 | 之后妹妹会拿起我们 IoC 家族祖传的面筋处理神器 BeanDefinitionParserDelegate,从 beans 箱里面一个一个取出形态各异的面筋 bean 分别进行加工处理。刚拿出来的面筋 bean 是不会直接烤了卖的,我们会将 bean 用神器 ParserDelegate 进行九九八十一道细致处理,所以我们家烤出来的面筋才会如此劲道美味,世世代代延绵不断。 22 | 不过处理程序再怎么细致复杂,也不过就是分为两大部分:第一,处理 bean 的属性信息,如 id,class,scope 等;第二,处理 bean 的子元素,主要是 标签,而 标签又有属性和子元素,且子元素类型更加丰富复杂,可能是<map>,<set>,<list>,<array> 等。所以如果你们想学我家的祖传秘方,开个同样的摊子干倒我,也不是这么容易的哦。 23 | 经过上面的步骤,一个配置文件中的面筋 bean 就被处理包装成了半成品 BeanDefinitionHolder。 24 | 25 | ## 第三阶段:将 BeanDefinition 注册进 IoC 容器(BeanDefinitionReaderUtils) 26 | 27 | 妹妹在用神器 BeanDefinitionParserDelegate 经过一顿疯狂操作之后,将包装好的半成品 BeanDefinitionHolder 扔进传输机 BeanDefinitionReaderUtils,并且输入哥哥给她的神秘人地址,就继续处理下一个面筋 bean 咯。 28 | 之后,传输机将 BeanDefinitionHolder 的包装打开,分别取出 beanName(面筋的唯一标识)和 BeanDefinition(面筋本筋),传输的目的地是 BeanDefinitionRegistry 的工作室(这就是我前面给哥哥 beanDefinitionReader 的地址)。 29 | 这家工作室的 BeanDefinitionRegistry 其实就是我的影分身之一,因为我的祖先实现了这个接口。影分身 Registry 检查一下传输过来的 beanName(面筋的唯一标识)和 BeanDefinition(面筋本筋),如果没什么问题,就把它们用根绳子系在一起扔进我的“王之面筋宝库”,一个 ConcurrentHashMap(64),也有人把我的“面筋宝库”称作“IoC 容器本器”,我也无可辩驳,谁让他们吃面筋付钱了呢。 30 | 就这样,每一种取出来的面筋都会经过这些处理。等到所有的面筋处理完了,也差不多到了傍晚,每到这时我就会拿起梳子和发油,对着镶满钻石的镜子,梳理整齐与徐峥同款的明星发型,唱着魔性的“我的烤面筋 ~”,骑着小车车,出摊咯 ~ 31 | 32 | 面筋等原材料基本上都已经处理完毕,但把这些原材料变成程序员手中的“烤面筋”也是一门复杂而精细的手艺,老铁们记得 watch、star、fork,素质三连一波,下一期我将带领你们走进 spring 商业街的夜市,一起烤出香喷喷的面筋,成为这条 gai 上最亮的仔! 33 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PlaceholderResolver/Spring-PlaceholderResolver.md: -------------------------------------------------------------------------------- 1 | # Spring PlaceholderResolver 2 | 3 | - 类全路径: `org.springframework.util.PropertyPlaceholderHelper.PlaceholderResolver` 4 | 5 | - 类作用将占位符中的内容替换成属性值. 6 | - 假设现有属性表: user.dir = c:\home 7 | 传入参数 user.dir 会获得 c:\home 8 | 9 | ```java 10 | 11 | @FunctionalInterface 12 | public interface PlaceholderResolver { 13 | 14 | /** 15 | * Resolve the supplied placeholder name to the replacement value. 16 | * @param placeholderName the name of the placeholder to resolve 17 | * @return the replacement value, or {@code null} if no replacement is to be made 18 | */ 19 | @Nullable 20 | String resolvePlaceholder(String placeholderName); 21 | } 22 | 23 | ``` 24 | 25 | - 类图如下 26 | 27 | ![PropertyPlaceholderConfigurerResolver](/images/spring/PropertyPlaceholderConfigurerResolver.png) 28 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PlaceholderResolver/Spring-PropertyPlaceholderConfigurerResolver.md: -------------------------------------------------------------------------------- 1 | # Spring PropertyPlaceholderConfigurerResolver 2 | 3 | - 类全路径: `org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.PropertyPlaceholderConfigurerResolver` 4 | 5 | - 这个类是从 Properties 中获取属性 6 | 7 | ```java 8 | private final class PropertyPlaceholderConfigurerResolver implements PlaceholderResolver { 9 | 10 | private final Properties props; 11 | 12 | private PropertyPlaceholderConfigurerResolver(Properties props) { 13 | this.props = props; 14 | } 15 | 16 | @Override 17 | @Nullable 18 | public String resolvePlaceholder(String placeholderName) { 19 | return PropertyPlaceholderConfigurer.this.resolvePlaceholder(placeholderName, 20 | this.props, systemPropertiesMode); 21 | } 22 | } 23 | 24 | ``` 25 | 26 | - 详细方法如下 27 | 28 | ```java 29 | 30 | @Nullable 31 | protected String resolvePlaceholder(String placeholder, Properties props, int systemPropertiesMode) { 32 | String propVal = null; 33 | if (systemPropertiesMode == SYSTEM_PROPERTIES_MODE_OVERRIDE) { 34 | propVal = resolveSystemProperty(placeholder); 35 | } 36 | if (propVal == null) { 37 | propVal = resolvePlaceholder(placeholder, props); 38 | } 39 | if (propVal == null && systemPropertiesMode == SYSTEM_PROPERTIES_MODE_FALLBACK) { 40 | propVal = resolveSystemProperty(placeholder); 41 | } 42 | return propVal; 43 | } 44 | 45 | ``` 46 | 47 | ```java 48 | @Nullable 49 | protected String resolvePlaceholder(String placeholder, Properties props) { 50 | return props.getProperty(placeholder); 51 | } 52 | ``` 53 | 54 | ```java 55 | @Nullable 56 | protected String resolveSystemProperty(String key) { 57 | try { 58 | String value = System.getProperty(key); 59 | if (value == null && this.searchSystemEnvironment) { 60 | value = System.getenv(key); 61 | } 62 | return value; 63 | } 64 | catch (Throwable ex) { 65 | if (logger.isDebugEnabled()) { 66 | logger.debug("Could not access system property '" + key + "': " + ex); 67 | } 68 | return null; 69 | } 70 | } 71 | 72 | ``` 73 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PlaceholderResolver/Spring-ServletContextPlaceholderResolver.md: -------------------------------------------------------------------------------- 1 | # Spring ServletContextPlaceholderResolver 2 | 3 | - 类全路径: `org.springframework.web.util.ServletContextPropertyUtils.ServletContextPlaceholderResolver` 4 | 5 | ```java 6 | private static class ServletContextPlaceholderResolver 7 | implements PropertyPlaceholderHelper.PlaceholderResolver { 8 | 9 | private final String text; 10 | 11 | private final ServletContext servletContext; 12 | 13 | public ServletContextPlaceholderResolver(String text, ServletContext servletContext) { 14 | this.text = text; 15 | this.servletContext = servletContext; 16 | } 17 | 18 | @Override 19 | @Nullable 20 | public String resolvePlaceholder(String placeholderName) { 21 | try { 22 | // servlet 上下文获取 23 | String propVal = this.servletContext.getInitParameter(placeholderName); 24 | if (propVal == null) { 25 | // Fall back to system properties. 26 | propVal = System.getProperty(placeholderName); 27 | if (propVal == null) { 28 | // Fall back to searching the system environment. 29 | propVal = System.getenv(placeholderName); 30 | } 31 | } 32 | return propVal; 33 | } 34 | catch (Throwable ex) { 35 | System.err.println("Could not resolve placeholder '" + placeholderName + "' in [" + 36 | this.text + "] as ServletContext init-parameter or system property: " + ex); 37 | return null; 38 | } 39 | } 40 | } 41 | 42 | ``` 43 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PlaceholderResolver/Spring-SystemPropertyPlaceholderResolver.md: -------------------------------------------------------------------------------- 1 | # Spring SystemPropertyPlaceholderResolver 2 | 3 | - 类全路径: `org.springframework.util.SystemPropertyUtils.SystemPropertyPlaceholderResolver` 4 | 5 | ```java 6 | private static class SystemPropertyPlaceholderResolver implements PropertyPlaceholderHelper.PlaceholderResolver { 7 | 8 | private final String text; 9 | 10 | public SystemPropertyPlaceholderResolver(String text) { 11 | this.text = text; 12 | } 13 | 14 | @Override 15 | @Nullable 16 | public String resolvePlaceholder(String placeholderName) { 17 | try { 18 | String propVal = System.getProperty(placeholderName); 19 | if (propVal == null) { 20 | // Fall back to searching the system environment. 21 | // 获取系统属性 22 | propVal = System.getenv(placeholderName); 23 | } 24 | return propVal; 25 | } 26 | catch (Throwable ex) { 27 | System.err.println("Could not resolve placeholder '" + placeholderName + "' in [" + 28 | this.text + "] as system property: " + ex); 29 | return null; 30 | } 31 | } 32 | } 33 | 34 | ``` 35 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PlaceholderResolver/images/PropertyPlaceholderConfigurerResolver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/docs/Spring/clazz/PlaceholderResolver/images/PropertyPlaceholderConfigurerResolver.png -------------------------------------------------------------------------------- /docs/Spring/clazz/PropertySource/Spring-ComparisonPropertySource.md: -------------------------------------------------------------------------------- 1 | # Spring ComparisonPropertySource 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read) 5 | 6 | - 整体代码如下. 7 | - 下面几个调用方法会直接抛出异常 8 | 1. getSource 9 | 1. containsProperty 10 | 1. getProperty 11 | 12 | ```java 13 | static class ComparisonPropertySource extends StubPropertySource { 14 | 15 | // 异常信息 16 | private static final String USAGE_ERROR = 17 | "ComparisonPropertySource instances are for use with collection comparison only"; 18 | 19 | public ComparisonPropertySource(String name) { 20 | super(name); 21 | } 22 | 23 | @Override 24 | public Object getSource() { 25 | // 抛异常 26 | throw new UnsupportedOperationException(USAGE_ERROR); 27 | } 28 | 29 | @Override 30 | public boolean containsProperty(String name) { 31 | // 抛异常 32 | throw new UnsupportedOperationException(USAGE_ERROR); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public String getProperty(String name) { 38 | // 抛异常 39 | throw new UnsupportedOperationException(USAGE_ERROR); 40 | } 41 | } 42 | 43 | ``` 44 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PropertySource/Spring-EnumerablePropertySource.md: -------------------------------------------------------------------------------- 1 | # Spring EnumerablePropertySource 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read) 5 | 6 | - 全路径: `org.springframework.core.env.EnumerablePropertySource` 7 | - 在这个类中定义了一个抽象方法`getPropertyNames` 用来获取所有的 property 的名称 8 | 9 | ```java 10 | public abstract String[] getPropertyNames(); 11 | ``` 12 | 13 | - 整体代码如下 14 | 15 | ```java 16 | public abstract class EnumerablePropertySource extends PropertySource { 17 | 18 | public EnumerablePropertySource(String name, T source) { 19 | super(name, source); 20 | } 21 | 22 | protected EnumerablePropertySource(String name) { 23 | super(name); 24 | } 25 | 26 | 27 | /** 28 | * Return whether this {@code PropertySource} contains a property with the given name. 29 | *

This implementation checks for the presence of the given name within the 30 | * {@link #getPropertyNames()} array. 31 | * 32 | * 在属性列表中是否存在 properties 33 | * @param name the name of the property to find 34 | */ 35 | @Override 36 | public boolean containsProperty(String name) { 37 | return ObjectUtils.containsElement(getPropertyNames(), name); 38 | } 39 | 40 | /** 41 | * Return the names of all properties contained by the 42 | * 获取所有的 properties 名称 43 | * {@linkplain #getSource() source} object (never {@code null}). 44 | */ 45 | public abstract String[] getPropertyNames(); 46 | 47 | } 48 | ``` 49 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PropertySource/Spring-MapPropertySource.md: -------------------------------------------------------------------------------- 1 | # Spring MapPropertySource 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read) 5 | 6 | - 类全路径: `org.springframework.core.env.MapPropertySource` 7 | - 内部数据结构是一个`Map` 8 | 这是一个对 map 的操作. 9 | - 整体代码如下. 10 | 11 | ```java 12 | 13 | public class MapPropertySource extends EnumerablePropertySource> { 14 | 15 | public MapPropertySource(String name, Map source) { 16 | super(name, source); 17 | } 18 | 19 | 20 | @Override 21 | @Nullable 22 | public Object getProperty(String name) { 23 | // 从map中获取 name 对应的value 24 | return this.source.get(name); 25 | } 26 | 27 | @Override 28 | public boolean containsProperty(String name) { 29 | // 判断是否存在 name 属性 30 | return this.source.containsKey(name); 31 | } 32 | 33 | @Override 34 | public String[] getPropertyNames() { 35 | // 互殴去 map 的所有key 36 | return StringUtils.toStringArray(this.source.keySet()); 37 | } 38 | 39 | } 40 | 41 | ``` 42 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PropertySource/Spring-PropertiesPropertySource.md: -------------------------------------------------------------------------------- 1 | # Spring PropertiesPropertySource 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read) 5 | 6 | - 全路径: `org.springframework.core.env.PropertiesPropertySource` 7 | 8 | - Properties 是 map 结构。可以做类型转换. 9 | - getPropertyNames 就转换成了父类 MapPropertySource 的方法了 10 | - map.keySet() 11 | 12 | ```java 13 | public class PropertiesPropertySource extends MapPropertySource { 14 | 15 | @SuppressWarnings({"rawtypes", "unchecked"}) 16 | public PropertiesPropertySource(String name, Properties source) { 17 | super(name, (Map) source); 18 | } 19 | 20 | protected PropertiesPropertySource(String name, Map source) { 21 | super(name, source); 22 | } 23 | 24 | 25 | @Override 26 | public String[] getPropertyNames() { 27 | synchronized (this.source) { 28 | return super.getPropertyNames(); 29 | } 30 | } 31 | 32 | } 33 | ``` 34 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PropertySource/Spring-ServletConfigPropertySource.md: -------------------------------------------------------------------------------- 1 | # Spring ServletConfigPropertySource 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read) 5 | 6 | - 类全路径: `org.springframework.web.context.support.ServletConfigPropertySource` 7 | - 内部数据结构是 `ServletConfig` 8 | 9 | - 整体代码如下 10 | 11 | ```java 12 | 13 | public class ServletConfigPropertySource extends EnumerablePropertySource { 14 | 15 | public ServletConfigPropertySource(String name, ServletConfig servletConfig) { 16 | super(name, servletConfig); 17 | } 18 | 19 | @Override 20 | public String[] getPropertyNames() { 21 | // javax.servlet.ServletConfig.getInitParameterNames 22 | return StringUtils.toStringArray(this.source.getInitParameterNames()); 23 | } 24 | 25 | @Override 26 | @Nullable 27 | public String getProperty(String name) { 28 | // javax.servlet.ServletConfig.getInitParameter 29 | return this.source.getInitParameter(name); 30 | } 31 | 32 | } 33 | 34 | ``` 35 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PropertySource/Spring-ServletContextPropertySource.md: -------------------------------------------------------------------------------- 1 | # Spring ServletContextPropertySource 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read) 5 | 6 | - 类全路径: `org.springframework.web.context.support.ServletContextPropertySource` 7 | - 内部数据结构是 ServletContext 接口 8 | - 整体代码如下. 9 | 10 | ```java 11 | 12 | public class ServletContextPropertySource extends EnumerablePropertySource { 13 | 14 | public ServletContextPropertySource(String name, ServletContext servletContext) { 15 | super(name, servletContext); 16 | } 17 | 18 | @Override 19 | public String[] getPropertyNames() { 20 | // javax.servlet.ServletContext.getInitParameterNames 方法调用 21 | return StringUtils.toStringArray(this.source.getInitParameterNames()); 22 | } 23 | 24 | @Override 25 | @Nullable 26 | public String getProperty(String name) { 27 | // javax.servlet.ServletContext.getInitParameter 28 | return this.source.getInitParameter(name); 29 | } 30 | 31 | } 32 | 33 | ``` 34 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PropertySource/Spring-SimpleCommandLineArgsParser.md: -------------------------------------------------------------------------------- 1 | # Spring SimpleCommandLineArgsParser 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read) 5 | 6 | - 类全路径: `org.springframework.core.env.SimpleCommandLineArgsParser 7 | - 类作用: 将命令行参数解析成 `org.springframework.core.env.CommandLineArgs` 8 | 9 | - 完整代码如下. 10 | 11 | ```java 12 | 13 | class SimpleCommandLineArgsParser { 14 | 15 | /** 16 | * Parse the given {@code String} array based on the rules described {@linkplain 17 | * SimpleCommandLineArgsParser above}, returning a fully-populated 18 | * {@link CommandLineArgs} object. 19 | * @param args command line arguments, typically from a {@code main()} method 20 | */ 21 | public CommandLineArgs parse(String... args) { 22 | CommandLineArgs commandLineArgs = new CommandLineArgs(); 23 | for (String arg : args) { 24 | if (arg.startsWith("--")) { 25 | String optionText = arg.substring(2, arg.length()); 26 | String optionName; 27 | String optionValue = null; 28 | if (optionText.contains("=")) { 29 | optionName = optionText.substring(0, optionText.indexOf('=')); 30 | optionValue = optionText.substring(optionText.indexOf('=') + 1, optionText.length()); 31 | } 32 | else { 33 | optionName = optionText; 34 | } 35 | if (optionName.isEmpty() || (optionValue != null && optionValue.isEmpty())) { 36 | throw new IllegalArgumentException("Invalid argument syntax: " + arg); 37 | } 38 | commandLineArgs.addOptionArg(optionName, optionValue); 39 | } 40 | else { 41 | commandLineArgs.addNonOptionArg(arg); 42 | } 43 | } 44 | return commandLineArgs; 45 | } 46 | 47 | } 48 | 49 | ``` 50 | 51 | - 处理流程 52 | 1. 循环命令行参数列表 53 | 2. 去掉 `--` 和 `=` 获取参数名称和参数值放入结果集合 54 | -------------------------------------------------------------------------------- /docs/Spring/clazz/PropertySource/Spring-StubPropertySource.md: -------------------------------------------------------------------------------- 1 | # Spring StubPropertySource 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read) 5 | 6 | - 整体代码如下. 7 | - 通过 StubPropertySource 的 getProperty 方法永远返回 null 8 | 9 | ```java 10 | public static class StubPropertySource extends PropertySource { 11 | 12 | public StubPropertySource(String name) { 13 | super(name, new Object()); 14 | } 15 | 16 | /** 17 | * Always returns {@code null}. 18 | */ 19 | @Override 20 | @Nullable 21 | public String getProperty(String name) { 22 | return null; 23 | } 24 | } 25 | 26 | ``` 27 | -------------------------------------------------------------------------------- /docs/Spring/clazz/Spring-OrderUtils.md: -------------------------------------------------------------------------------- 1 | # Spring OrderUtils 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - 源码阅读仓库: [SourceHot-Spring](https://github.com/SourceHot/spring-framework-read) 5 | - `org.springframework.core.annotation.OrderUtils`主要方法如下 6 | 1. getOrder 7 | 1. getPriority 8 | - 测试类`org.springframework.core.annotation.OrderUtilsTests` 9 | 10 | ```java 11 | @Nullable 12 | public static Integer getOrder(Class type) { 13 | // 缓存中获取 14 | Object cached = orderCache.get(type); 15 | if (cached != null) { 16 | // 返回 int 17 | return (cached instanceof Integer ? (Integer) cached : null); 18 | } 19 | /** 20 | * 注解工具类,寻找{@link Order}注解 21 | */ 22 | Order order = AnnotationUtils.findAnnotation(type, Order.class); 23 | Integer result; 24 | if (order != null) { 25 | // 返回 26 | result = order.value(); 27 | } else { 28 | result = getPriority(type); 29 | } 30 | // key: 类名,value: intValue 31 | orderCache.put(type, (result != null ? result : NOT_ANNOTATED)); 32 | return result; 33 | } 34 | 35 | ``` 36 | 37 | ```java 38 | @Nullable 39 | public static Integer getPriority(Class type) { 40 | if (priorityAnnotationType == null) { 41 | return null; 42 | } 43 | // 缓存中获取 44 | Object cached = priorityCache.get(type); 45 | if (cached != null) { 46 | // 不为空返回 47 | return (cached instanceof Integer ? (Integer) cached : null); 48 | } 49 | // 注解工具获取注解 50 | Annotation priority = AnnotationUtils.findAnnotation(type, priorityAnnotationType); 51 | Integer result = null; 52 | if (priority != null) { 53 | // 获取 value 54 | result = (Integer) AnnotationUtils.getValue(priority); 55 | } 56 | // 向缓存插入数据 57 | priorityCache.put(type, (result != null ? result : NOT_ANNOTATED)); 58 | return result; 59 | } 60 | 61 | ``` 62 | -------------------------------------------------------------------------------- /docs/Spring/clazz/Spring-StopWatch.md: -------------------------------------------------------------------------------- 1 | # Spring StopWatch 2 | 3 | - Author: [HuiFer](https://github.com/huifer) 4 | - 源码阅读仓库: [SourceHot-spring](https://github.com/SourceHot/spring-framework-read) 5 | 6 | - 全路径: `org.springframework.util.StopWatch` 7 | 8 | ## 属性 9 | 10 | - taskList: 任务信息列表 11 | - keepTaskList: 是否保留任务信息列表 12 | - startTimeMillis: 任务开始的时间 13 | - currentTaskName: 任务名称 14 | - lastTaskInfo: 任务信息 15 | - taskCount: 任务数量 16 | - totalTimeMillis: 总共花费的时间 17 | 18 | ## 方法 19 | 20 | - `org.springframework.util.StopWatch.start(java.lang.String)` 21 | 22 | ```java 23 | public void start(String taskName) throws IllegalStateException { 24 | if (this.currentTaskName != null) { 25 | throw new IllegalStateException("Can't start StopWatch: it's already running"); 26 | } 27 | this.currentTaskName = taskName; 28 | this.startTimeMillis = System.currentTimeMillis(); 29 | } 30 | ``` 31 | 32 | - `org.springframework.util.StopWatch.stop` 33 | 34 | ```java 35 | public void stop() throws IllegalStateException { 36 | if (this.currentTaskName == null) { 37 | throw new IllegalStateException("Can't stop StopWatch: it's not running"); 38 | } 39 | // 消费的时间 40 | long lastTime = System.currentTimeMillis() - this.startTimeMillis; 41 | this.totalTimeMillis += lastTime; 42 | // 任务信息初始化 43 | this.lastTaskInfo = new TaskInfo(this.currentTaskName, lastTime); 44 | if (this.keepTaskList) { 45 | this.taskList.add(this.lastTaskInfo); 46 | } 47 | ++this.taskCount; 48 | this.currentTaskName = null; 49 | } 50 | 51 | ``` 52 | -------------------------------------------------------------------------------- /docs/Spring/clazz/Spring-SystemPropertyUtils.md: -------------------------------------------------------------------------------- 1 | # Spring SystemPropertyUtils 2 | 3 | - spring 中获取系统属性的工具类 4 | 5 | - 内部属性 6 | 7 | ```java 8 | /** 9 | * 10 | * Prefix for system property placeholders: "${". 11 | * 前缀占位符 12 | * */ 13 | public static final String PLACEHOLDER_PREFIX = "${"; 14 | 15 | /** 16 | * Suffix for system property placeholders: "}". 17 | * 后缀占位符 18 | * */ 19 | public static final String PLACEHOLDER_SUFFIX = "}"; 20 | 21 | /** 22 | * Value separator for system property placeholders: ":". 23 | * 值分割符号 24 | * */ 25 | public static final String VALUE_SEPARATOR = ":"; 26 | 27 | 28 | /** 29 | * 占位符解析类 30 | */ 31 | private static final PropertyPlaceholderHelper strictHelper = 32 | new PropertyPlaceholderHelper(PLACEHOLDER_PREFIX, PLACEHOLDER_SUFFIX, VALUE_SEPARATOR, false); 33 | 34 | /** 35 | * 占位符解析类 36 | */ 37 | private static final PropertyPlaceholderHelper nonStrictHelper = 38 | new PropertyPlaceholderHelper(PLACEHOLDER_PREFIX, PLACEHOLDER_SUFFIX, VALUE_SEPARATOR, true); 39 | ``` 40 | 41 | ## resolvePlaceholders 42 | 43 | - 解析属性 44 | 45 | ![SystemPropertyUtils-resolvePlaceholders.png](/images/spring/SystemPropertyUtils-resolvePlaceholders.png) 46 | 47 | 时序图因为有递归所以看着有点长, 其核心方法最后会指向 PlaceholderResolver 48 | 49 | 通过 PlaceholderResolver 获取属性值 50 | 51 | 在 `SystemPropertyUtils` 内部有 `PlaceholderResolver ` 实现 52 | 53 | - 最终通过下面的类来获取具体的属性值 54 | 55 | ```java 56 | private static class SystemPropertyPlaceholderResolver implements PropertyPlaceholderHelper.PlaceholderResolver { 57 | 58 | private final String text; 59 | 60 | public SystemPropertyPlaceholderResolver(String text) { 61 | this.text = text; 62 | } 63 | 64 | @Override 65 | @Nullable 66 | public String resolvePlaceholder(String placeholderName) { 67 | try { 68 | String propVal = System.getProperty(placeholderName); 69 | if (propVal == null) { 70 | // Fall back to searching the system environment. 71 | // 获取系统属性 72 | propVal = System.getenv(placeholderName); 73 | } 74 | return propVal; 75 | } 76 | catch (Throwable ex) { 77 | System.err.println("Could not resolve placeholder '" + placeholderName + "' in [" + 78 | this.text + "] as system property: " + ex); 79 | return null; 80 | } 81 | } 82 | } 83 | ``` 84 | -------------------------------------------------------------------------------- /docs/Spring/clazz/format/AnnotationFormatterFactory/Spring-DateTimeFormatAnnotationFormatterFactory.md: -------------------------------------------------------------------------------- 1 | # Spring DateTimeFormatAnnotationFormatterFactory 2 | 3 | - 类全路径: `org.springframework.format.datetime.DateTimeFormatAnnotationFormatterFactory` 4 | 5 | - 类图 6 | ![EmbeddedValueResolutionSupport](/images/spring/DateTimeFormatAnnotationFormatterFactory.png) 7 | 8 | ```java 9 | public class DateTimeFormatAnnotationFormatterFactory extends EmbeddedValueResolutionSupport 10 | implements AnnotationFormatterFactory { 11 | 12 | /** 13 | * 字段类型 14 | */ 15 | private static final Set> FIELD_TYPES; 16 | 17 | @Override 18 | public Set> getFieldTypes() { 19 | return FIELD_TYPES; 20 | } 21 | 22 | @Override 23 | public Printer getPrinter(DateTimeFormat annotation, Class fieldType) { 24 | return getFormatter(annotation, fieldType); 25 | } 26 | 27 | @Override 28 | public Parser getParser(DateTimeFormat annotation, Class fieldType) { 29 | return getFormatter(annotation, fieldType); 30 | } 31 | 32 | protected Formatter getFormatter(DateTimeFormat annotation, Class fieldType) { 33 | DateFormatter formatter = new DateFormatter(); 34 | // style 35 | String style = resolveEmbeddedValue(annotation.style()); 36 | // 判断时间格式是否村子啊 37 | if (StringUtils.hasLength(style)) { 38 | formatter.setStylePattern(style); 39 | } 40 | // iso 设置 41 | formatter.setIso(annotation.iso()); 42 | // date time pattern 43 | String pattern = resolveEmbeddedValue(annotation.pattern()); 44 | // 设置 45 | if (StringUtils.hasLength(pattern)) { 46 | formatter.setPattern(pattern); 47 | } 48 | return formatter; 49 | } 50 | 51 | static { 52 | Set> fieldTypes = new HashSet<>(4); 53 | // 加入字段类型 54 | fieldTypes.add(Date.class); 55 | fieldTypes.add(Calendar.class); 56 | fieldTypes.add(Long.class); 57 | FIELD_TYPES = Collections.unmodifiableSet(fieldTypes); 58 | } 59 | 60 | } 61 | 62 | ``` 63 | -------------------------------------------------------------------------------- /docs/Spring/clazz/format/Parser/Spring-DateTimeParser.md: -------------------------------------------------------------------------------- 1 | # Spring DateTimeParser 2 | 3 | - 类全路径: `org.springframework.format.datetime.joda.DateTimeParser` 4 | 5 | - 代码如下 6 | 7 | ```java 8 | public final class DateTimeParser implements Parser { 9 | 10 | private final DateTimeFormatter formatter; 11 | 12 | 13 | /** 14 | * Create a new DateTimeParser. 15 | * @param formatter the Joda DateTimeFormatter instance 16 | */ 17 | public DateTimeParser(DateTimeFormatter formatter) { 18 | this.formatter = formatter; 19 | } 20 | 21 | 22 | @Override 23 | public DateTime parse(String text, Locale locale) throws ParseException { 24 | // DateTimeFormatter 转换字符串事件类型 25 | return JodaTimeContextHolder.getFormatter(this.formatter, locale).parseDateTime(text); 26 | } 27 | 28 | } 29 | 30 | ``` 31 | -------------------------------------------------------------------------------- /docs/Spring/clazz/format/Printer/Spring-MillisecondInstantPrinter.md: -------------------------------------------------------------------------------- 1 | # Spring MillisecondInstantPrinter 2 | 3 | - 类全路径: `org.springframework.format.datetime.joda.MillisecondInstantPrinter` 4 | 5 | ```java 6 | public final class MillisecondInstantPrinter implements Printer { 7 | 8 | private final DateTimeFormatter formatter; 9 | 10 | 11 | /** 12 | * Create a new ReadableInstantPrinter. 13 | * @param formatter the Joda DateTimeFormatter instance 14 | */ 15 | public MillisecondInstantPrinter(DateTimeFormatter formatter) { 16 | this.formatter = formatter; 17 | } 18 | 19 | 20 | @Override 21 | public String print(Long instant, Locale locale) { 22 | // DateTimeFormatter .print 23 | return JodaTimeContextHolder.getFormatter(this.formatter, locale).print(instant); 24 | } 25 | 26 | } 27 | 28 | ``` 29 | -------------------------------------------------------------------------------- /docs/Spring/clazz/format/Spring-AnnotationFormatterFactory.md: -------------------------------------------------------------------------------- 1 | # Spring AnnotationFormatterFactory 2 | 3 | - 类全路径: `org.springframework.format.AnnotationFormatterFactory` 4 | 5 | ```java 6 | 7 | public interface AnnotationFormatterFactory { 8 | 9 | /** 10 | * The types of fields that may be annotated with the <A> annotation. 11 | * 字段类型 12 | */ 13 | Set> getFieldTypes(); 14 | 15 | /** 16 | * Get the Printer to print the value of a field of {@code fieldType} annotated with 17 | * {@code annotation}. 18 | *

If the type T the printer accepts is not assignable to {@code fieldType}, a 19 | * coercion from {@code fieldType} to T will be attempted before the Printer is invoked. 20 | * 通过注解和字段类型获取输出接口 21 | * @param annotation the annotation instance 22 | * @param fieldType the type of field that was annotated 23 | * @return the printer 24 | */ 25 | Printer getPrinter(A annotation, Class fieldType); 26 | 27 | /** 28 | * Get the Parser to parse a submitted value for a field of {@code fieldType} 29 | * annotated with {@code annotation}. 30 | *

If the object the parser returns is not assignable to {@code fieldType}, 31 | * a coercion to {@code fieldType} will be attempted before the field is set. 32 | * 通过注解和字段类型获取解析接口 33 | * @param annotation the annotation instance 34 | * @param fieldType the type of field that was annotated 35 | * @return the parser 36 | */ 37 | Parser getParser(A annotation, Class fieldType); 38 | 39 | } 40 | 41 | ``` 42 | -------------------------------------------------------------------------------- /docs/Spring/clazz/format/Spring-Formatter.md: -------------------------------------------------------------------------------- 1 | # Spring Formatter 2 | 3 | - 类全路径: `org.springframework.format.Formatter` 4 | 5 | ```java 6 | public interface Formatter extends Printer, Parser { 7 | 8 | } 9 | ``` 10 | 11 | - 该接口继承了 printer 和 parser 两个接口. 12 | - 比较常见的有: `DateFormatter` 就是继承这个接口. 13 | -------------------------------------------------------------------------------- /docs/Spring/clazz/format/Spring-Parser.md: -------------------------------------------------------------------------------- 1 | # Spring Parser 2 | 3 | - 类全路径: `org.springframework.format.Parser` 4 | - 类作用: 字符串准换成 java 对象 5 | 6 | ```java 7 | 8 | @FunctionalInterface 9 | public interface Parser { 10 | 11 | /** 12 | * Parse a text String to produce a T. 13 | * 将字符串转换成对象 14 | * @param text the text string 15 | * @param locale the current user locale 16 | * @return an instance of T 17 | * @throws ParseException when a parse exception occurs in a java.text parsing library 18 | * @throws IllegalArgumentException when a parse exception occurs 19 | */ 20 | T parse(String text, Locale locale) throws ParseException; 21 | 22 | } 23 | ``` 24 | 25 | - 类图 26 | 27 | ![Parser](/images/spring/Parser.png) 28 | -------------------------------------------------------------------------------- /docs/Spring/clazz/format/Spring-Printer.md: -------------------------------------------------------------------------------- 1 | # Spring Printer 2 | 3 | - 类全路径: `org.springframework.format.Printer` 4 | - 类作用: 对象转换成字符串 5 | 6 | ```java 7 | @FunctionalInterface 8 | public interface Printer { 9 | 10 | /** 11 | * Print the object of type T for display. 12 | * 打印对象 13 | * @param object the instance to print 14 | * @param locale the current user locale 15 | * @return the printed text string 16 | */ 17 | String print(T object, Locale locale); 18 | 19 | } 20 | ``` 21 | -------------------------------------------------------------------------------- /docs/Tomcat/servlet容器详解.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Tomcat/一个简单的Web服务器代码设计.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /docs/Tomcat/一个简单的servlet容器代码设计.md: -------------------------------------------------------------------------------- 1 | 努力编写中... 2 | -------------------------------------------------------------------------------- /images/ConcurrentProgramming/线程池流程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/ConcurrentProgramming/线程池流程.png -------------------------------------------------------------------------------- /images/DesignPattern/建造者模式类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/DesignPattern/建造者模式类图.png -------------------------------------------------------------------------------- /images/DesignPattern/策略模式类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/DesignPattern/策略模式类图.png -------------------------------------------------------------------------------- /images/DesignPattern/装饰器模式类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/DesignPattern/装饰器模式类图.png -------------------------------------------------------------------------------- /images/DesignPattern/观察者模式类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/DesignPattern/观察者模式类图.png -------------------------------------------------------------------------------- /images/DesignPattern/责任链模式.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/DesignPattern/责任链模式.png -------------------------------------------------------------------------------- /images/Dubbo/Dubbo工作原理图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/Dubbo工作原理图.png -------------------------------------------------------------------------------- /images/Dubbo/Dubbo整体架构图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/Dubbo整体架构图.png -------------------------------------------------------------------------------- /images/Dubbo/RegistryFactory组件类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/RegistryFactory组件类图.png -------------------------------------------------------------------------------- /images/Dubbo/Registry组件类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/Registry组件类图.png -------------------------------------------------------------------------------- /images/Dubbo/SPI组件目录结构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/SPI组件目录结构.png -------------------------------------------------------------------------------- /images/Dubbo/com.alibaba.dubbo.rpc.cluster包目录.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/com.alibaba.dubbo.rpc.cluster包目录.png -------------------------------------------------------------------------------- /images/Dubbo/dubbo-cluster模块工程结构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/dubbo-cluster模块工程结构.png -------------------------------------------------------------------------------- /images/Dubbo/dubbo-registry-zookeeper模块工程结构图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/dubbo-registry-zookeeper模块工程结构图.png -------------------------------------------------------------------------------- /images/Dubbo/dubbo-registry模块结构图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/dubbo-registry模块结构图.png -------------------------------------------------------------------------------- /images/Dubbo/dubbo-remoting-api的项目结构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/dubbo-remoting-api的项目结构.png -------------------------------------------------------------------------------- /images/Dubbo/dubbo-remoting的工程结构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/dubbo-remoting的工程结构.png -------------------------------------------------------------------------------- /images/Dubbo/dubbo注册中心在zookeeper中的结构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/dubbo注册中心在zookeeper中的结构.png -------------------------------------------------------------------------------- /images/Dubbo/dubbo项目结构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/dubbo项目结构.png -------------------------------------------------------------------------------- /images/Dubbo/一致性hash算法1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/一致性hash算法1.png -------------------------------------------------------------------------------- /images/Dubbo/一致性hash算法2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/一致性hash算法2.png -------------------------------------------------------------------------------- /images/Dubbo/一致性hash算法3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Dubbo/一致性hash算法3.png -------------------------------------------------------------------------------- /images/JDK1.8/JUC全量UML地图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/JDK1.8/JUC全量UML地图.png -------------------------------------------------------------------------------- /images/JDK1.8/JUC的locks包.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/JDK1.8/JUC的locks包.png -------------------------------------------------------------------------------- /images/JDK1.8/JUC锁组件类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/JDK1.8/JUC锁组件类图.png -------------------------------------------------------------------------------- /images/JDK1.8/ThreadLocal原理.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/JDK1.8/ThreadLocal原理.png -------------------------------------------------------------------------------- /images/JDK1.8/ThreadStatusChange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/JDK1.8/ThreadStatusChange.png -------------------------------------------------------------------------------- /images/JDK1.8/arrayList删除元素的过程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/JDK1.8/arrayList删除元素的过程.png -------------------------------------------------------------------------------- /images/JDK1.8/arraylist的add方法.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/JDK1.8/arraylist的add方法.png -------------------------------------------------------------------------------- /images/JDK1.8/线程池组件类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/JDK1.8/线程池组件类图.png -------------------------------------------------------------------------------- /images/Netty/BIO通信模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/BIO通信模型.png -------------------------------------------------------------------------------- /images/Netty/Buffer组件类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/Buffer组件类图.png -------------------------------------------------------------------------------- /images/Netty/ChannelHandler组件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/ChannelHandler组件.png -------------------------------------------------------------------------------- /images/Netty/ChannelPipeline的调度相关方法.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/ChannelPipeline的调度相关方法.png -------------------------------------------------------------------------------- /images/Netty/ChannelPipeline责任链事件处理过程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/ChannelPipeline责任链事件处理过程.png -------------------------------------------------------------------------------- /images/Netty/Channel组件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/Channel组件.png -------------------------------------------------------------------------------- /images/Netty/Channel组件类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/Channel组件类图.png -------------------------------------------------------------------------------- /images/Netty/IO复用模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/IO复用模型.png -------------------------------------------------------------------------------- /images/Netty/NIO客户端序列图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/NIO客户端序列图.png -------------------------------------------------------------------------------- /images/Netty/NIO服务端序列图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/NIO服务端序列图.png -------------------------------------------------------------------------------- /images/Netty/Netty串行化设计工作原理.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/Netty串行化设计工作原理.png -------------------------------------------------------------------------------- /images/Netty/Netty服务端创建时序图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/Netty服务端创建时序图.png -------------------------------------------------------------------------------- /images/Netty/Netty的Channel组件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/Netty的Channel组件.png -------------------------------------------------------------------------------- /images/Netty/Netty逻辑架构图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/Netty逻辑架构图.png -------------------------------------------------------------------------------- /images/Netty/NioServerSocketChannel的ChannelPipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/NioServerSocketChannel的ChannelPipeline.png -------------------------------------------------------------------------------- /images/Netty/Selector和SelectionKey和Channel关系图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/Selector和SelectionKey和Channel关系图.png -------------------------------------------------------------------------------- /images/Netty/ServerBootstrap的Handler模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/ServerBootstrap的Handler模型.png -------------------------------------------------------------------------------- /images/Netty/TCP粘包拆包问题.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/TCP粘包拆包问题.png -------------------------------------------------------------------------------- /images/Netty/image_1595751597062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/image_1595751597062.png -------------------------------------------------------------------------------- /images/Netty/image_1595752125587.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/image_1595752125587.png -------------------------------------------------------------------------------- /images/Netty/image_1595756711656.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/image_1595756711656.png -------------------------------------------------------------------------------- /images/Netty/image_1595756928493.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/image_1595756928493.png -------------------------------------------------------------------------------- /images/Netty/image_1595757035360.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/image_1595757035360.png -------------------------------------------------------------------------------- /images/Netty/image_1595757110003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/image_1595757110003.png -------------------------------------------------------------------------------- /images/Netty/image_1595757328715.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/image_1595757328715.png -------------------------------------------------------------------------------- /images/Netty/image_1595758329809.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/image_1595758329809.png -------------------------------------------------------------------------------- /images/Netty/伪异步IO通信模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/伪异步IO通信模型.png -------------------------------------------------------------------------------- /images/Netty/信号驱动IO模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/信号驱动IO模型.png -------------------------------------------------------------------------------- /images/Netty/四种IO模型的功能特性对比图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/四种IO模型的功能特性对比图.png -------------------------------------------------------------------------------- /images/Netty/基于Netty创建客户端时序图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/基于Netty创建客户端时序图.png -------------------------------------------------------------------------------- /images/Netty/异步IO模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/异步IO模型.png -------------------------------------------------------------------------------- /images/Netty/数据在客户端及服务器之间的整体IO流程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/数据在客户端及服务器之间的整体IO流程.png -------------------------------------------------------------------------------- /images/Netty/阻塞IO模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/阻塞IO模型.png -------------------------------------------------------------------------------- /images/Netty/非阻塞IO模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Netty/非阻塞IO模型.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318080601725.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318080601725.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318080901881.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318080901881.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318081112670.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318081112670.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318081322781.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318081322781.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318081352639.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318081352639.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318081458019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318081458019.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318085243888.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318085243888.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318090128983.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318090128983.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318090312626.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318090312626.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318090935285.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318090935285.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318091558233.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318091558233.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200318092027020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200318092027020.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319082131146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319082131146.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319082544653.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319082544653.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319083048849.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319083048849.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319083140225.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319083140225.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319083345067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319083345067.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319084141748.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319084141748.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319084151997.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319084151997.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319084357652.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319084357652.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319084902957.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319084902957.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319085446640.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319085446640.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200319090446231.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200319090446231.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200320150642022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200320150642022.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200320160423991.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200320160423991.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200320162835665.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200320162835665.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200320163001728.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200320163001728.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200320163806852.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200320163806852.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200320164145286.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200320164145286.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200320171138431.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200320171138431.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200320171734270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200320171734270.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323080611527.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323080611527.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323081009823.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323081009823.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323081903145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323081903145.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323082553595.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323082553595.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323083149737.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323083149737.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323083247061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323083247061.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323083656670.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323083656670.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323084922159.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323084922159.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323094446756.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323094446756.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323095626953.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323095626953.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323104711545.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323104711545.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323104815305.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323104815305.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323105053757.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323105053757.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323105155998.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323105155998.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323105830138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323105830138.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323110603959.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323110603959.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323112945449.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323112945449.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323115401750.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323115401750.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323115408877.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323115408877.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323115701118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323115701118.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323115711826.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323115711826.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323134135926.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323134135926.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323134325955.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323134325955.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323144523848.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323144523848.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323151409473.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323151409473.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323154205484.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323154205484.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323161442058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323161442058.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200323161522570.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200323161522570.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200324132053755.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200324132053755.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200324133449749.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200324133449749.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200324133901498.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200324133901498.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200324134813642.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200324134813642.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200324134837762.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200324134837762.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325085209824.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325085209824.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325085708416.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325085708416.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325090451465.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325090451465.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325090738203.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325090738203.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325090946470.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325090946470.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325091434110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325091434110.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325093238025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325093238025.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325093319391.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325093319391.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325094344562.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325094344562.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325094421008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325094421008.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325095208523.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325095208523.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325100539794.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325100539794.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325101605773.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325101605773.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200325102045939.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200325102045939.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200515150256581.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200515150256581.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200515160103338.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200515160103338.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200518111931477.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200518111931477.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200601170659521.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200601170659521.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200824085726621.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200824085726621.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200825084844709.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200825084844709.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200825092343271.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200825092343271.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200825140750035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200825140750035.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200825141506531.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200825141506531.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200825142332485.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200825142332485.png -------------------------------------------------------------------------------- /images/SpringBoot/image-20200825142418115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringBoot/image-20200825142418115.png -------------------------------------------------------------------------------- /images/SpringSecurity/003ff2fa-022e-47cb-8aa9-343ed7c40c4a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/003ff2fa-022e-47cb-8aa9-343ed7c40c4a.png -------------------------------------------------------------------------------- /images/SpringSecurity/0879e131-da5f-491e-a153-42770ce8b975.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/0879e131-da5f-491e-a153-42770ce8b975.png -------------------------------------------------------------------------------- /images/SpringSecurity/0a97b011-34ed-4d57-945e-95c8e6bafc8e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/0a97b011-34ed-4d57-945e-95c8e6bafc8e.png -------------------------------------------------------------------------------- /images/SpringSecurity/12629a18-56ef-4286-9ab9-c124dc3d6791.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/12629a18-56ef-4286-9ab9-c124dc3d6791.png -------------------------------------------------------------------------------- /images/SpringSecurity/1282014b-fc29-4c2b-9316-9fdd638653c9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/1282014b-fc29-4c2b-9316-9fdd638653c9.png -------------------------------------------------------------------------------- /images/SpringSecurity/1590bae4-2e3a-4f97-b02d-d918c49cac22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/1590bae4-2e3a-4f97-b02d-d918c49cac22.png -------------------------------------------------------------------------------- /images/SpringSecurity/1840f96a-6a31-4fce-8a98-02fa7fc60fbf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/1840f96a-6a31-4fce-8a98-02fa7fc60fbf.png -------------------------------------------------------------------------------- /images/SpringSecurity/19f71152-f456-4db7-a1d5-f79aaa37253b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/19f71152-f456-4db7-a1d5-f79aaa37253b.png -------------------------------------------------------------------------------- /images/SpringSecurity/1b03bdd4-6773-4b39-a664-fdf65d104403.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/1b03bdd4-6773-4b39-a664-fdf65d104403.png -------------------------------------------------------------------------------- /images/SpringSecurity/1e929fec-d1ab-44b5-89bc-6e5ebcda1daf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/1e929fec-d1ab-44b5-89bc-6e5ebcda1daf.png -------------------------------------------------------------------------------- /images/SpringSecurity/25899949-dac3-4873-a2af-7abfe0e97615.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/25899949-dac3-4873-a2af-7abfe0e97615.png -------------------------------------------------------------------------------- /images/SpringSecurity/2b54af34-7d68-4f40-8726-d02d18e03dea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/2b54af34-7d68-4f40-8726-d02d18e03dea.png -------------------------------------------------------------------------------- /images/SpringSecurity/2e5440bc-9488-4213-a030-0d25153bb2ea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/2e5440bc-9488-4213-a030-0d25153bb2ea.png -------------------------------------------------------------------------------- /images/SpringSecurity/3980e264-c073-456a-b808-715edd85633a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/3980e264-c073-456a-b808-715edd85633a.png -------------------------------------------------------------------------------- /images/SpringSecurity/3ea76980-417d-4c0c-9330-e0bb241c6a47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/3ea76980-417d-4c0c-9330-e0bb241c6a47.png -------------------------------------------------------------------------------- /images/SpringSecurity/42c5125e-0dc2-4c0c-9434-af4a9efd2d5d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/42c5125e-0dc2-4c0c-9434-af4a9efd2d5d.png -------------------------------------------------------------------------------- /images/SpringSecurity/4612c27e-dd9f-4e60-92dc-fc9858496ec5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/4612c27e-dd9f-4e60-92dc-fc9858496ec5.png -------------------------------------------------------------------------------- /images/SpringSecurity/476f8954-abe3-4e26-bfe1-8c5b4abbf0e0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/476f8954-abe3-4e26-bfe1-8c5b4abbf0e0.png -------------------------------------------------------------------------------- /images/SpringSecurity/47a7bca4-d858-4cb1-b126-347805b74053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/47a7bca4-d858-4cb1-b126-347805b74053.png -------------------------------------------------------------------------------- /images/SpringSecurity/481b88aa-028d-4392-8c0a-365f1d0e2ae9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/481b88aa-028d-4392-8c0a-365f1d0e2ae9.png -------------------------------------------------------------------------------- /images/SpringSecurity/4beaa02f-a93d-4d95-9ad1-0d7213cb0e46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/4beaa02f-a93d-4d95-9ad1-0d7213cb0e46.png -------------------------------------------------------------------------------- /images/SpringSecurity/4c9c302d-2ce0-4b5b-beb6-c76d2e94038f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/4c9c302d-2ce0-4b5b-beb6-c76d2e94038f.png -------------------------------------------------------------------------------- /images/SpringSecurity/4d84fe43-2646-4a6f-a580-f39f6416d02d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/4d84fe43-2646-4a6f-a580-f39f6416d02d.png -------------------------------------------------------------------------------- /images/SpringSecurity/51ba02f0-bae6-4c08-9adf-7ee0f12b05d3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/51ba02f0-bae6-4c08-9adf-7ee0f12b05d3.png -------------------------------------------------------------------------------- /images/SpringSecurity/522574e3-bacc-4794-a17e-492bc2b4457d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/522574e3-bacc-4794-a17e-492bc2b4457d.png -------------------------------------------------------------------------------- /images/SpringSecurity/52390725-d87d-42b1-9071-ea21e445e1e6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/52390725-d87d-42b1-9071-ea21e445e1e6.png -------------------------------------------------------------------------------- /images/SpringSecurity/558b8b1c-be32-44c4-8d8f-5f0d231741f8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/558b8b1c-be32-44c4-8d8f-5f0d231741f8.png -------------------------------------------------------------------------------- /images/SpringSecurity/56ac5128-eab7-4b92-912f-ff50bac68a4f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/56ac5128-eab7-4b92-912f-ff50bac68a4f.png -------------------------------------------------------------------------------- /images/SpringSecurity/5d511c93-3614-40e0-b3c9-9673c573d60f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/5d511c93-3614-40e0-b3c9-9673c573d60f.png -------------------------------------------------------------------------------- /images/SpringSecurity/6724647c-34ee-4a57-8cfa-b46f57400d14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/6724647c-34ee-4a57-8cfa-b46f57400d14.png -------------------------------------------------------------------------------- /images/SpringSecurity/68490740-e03c-4353-b5fc-ac99c0cf0435.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/68490740-e03c-4353-b5fc-ac99c0cf0435.png -------------------------------------------------------------------------------- /images/SpringSecurity/6b1aded6-5229-47ba-b192-78a7c2622b8c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/6b1aded6-5229-47ba-b192-78a7c2622b8c.png -------------------------------------------------------------------------------- /images/SpringSecurity/6c58e27d-dd29-48fc-b597-8067e1c97786.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/6c58e27d-dd29-48fc-b597-8067e1c97786.png -------------------------------------------------------------------------------- /images/SpringSecurity/6c72c09b-742c-4415-851a-8ca5292a4969.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/6c72c09b-742c-4415-851a-8ca5292a4969.png -------------------------------------------------------------------------------- /images/SpringSecurity/6e009bf1-aba3-4b89-8e86-d3d110e0f4a7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/6e009bf1-aba3-4b89-8e86-d3d110e0f4a7.png -------------------------------------------------------------------------------- /images/SpringSecurity/6eca7b58-80f9-4e98-8483-62b4ef751854.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/6eca7b58-80f9-4e98-8483-62b4ef751854.png -------------------------------------------------------------------------------- /images/SpringSecurity/7842f83d-5417-4cb2-bb30-d70f98c3053f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/7842f83d-5417-4cb2-bb30-d70f98c3053f.png -------------------------------------------------------------------------------- /images/SpringSecurity/870891e9-f8ea-4097-98c9-829b1cdcf145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/870891e9-f8ea-4097-98c9-829b1cdcf145.png -------------------------------------------------------------------------------- /images/SpringSecurity/895afead-ea6b-4ac6-8138-fbe0a223daf9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/895afead-ea6b-4ac6-8138-fbe0a223daf9.png -------------------------------------------------------------------------------- /images/SpringSecurity/8d05ac54-f034-47d4-b750-67b2e3b3cd14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/8d05ac54-f034-47d4-b750-67b2e3b3cd14.png -------------------------------------------------------------------------------- /images/SpringSecurity/8dddd63e-c567-4b41-a9d9-8ef8aa6f2a92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/8dddd63e-c567-4b41-a9d9-8ef8aa6f2a92.png -------------------------------------------------------------------------------- /images/SpringSecurity/8e1ac9db-5987-484d-abf4-4c6535c60cc6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/8e1ac9db-5987-484d-abf4-4c6535c60cc6.png -------------------------------------------------------------------------------- /images/SpringSecurity/8efa0b1c-2b32-4d5b-9655-985374326e10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/8efa0b1c-2b32-4d5b-9655-985374326e10.png -------------------------------------------------------------------------------- /images/SpringSecurity/90d3e369-510f-45cb-982d-241d2eedb55c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/90d3e369-510f-45cb-982d-241d2eedb55c.png -------------------------------------------------------------------------------- /images/SpringSecurity/964ec4a4-6039-4205-8a87-ea2febcc00b6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/964ec4a4-6039-4205-8a87-ea2febcc00b6.png -------------------------------------------------------------------------------- /images/SpringSecurity/97b6f22c-414d-4a16-aa8e-c3deece2f7cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/97b6f22c-414d-4a16-aa8e-c3deece2f7cd.png -------------------------------------------------------------------------------- /images/SpringSecurity/9f06c823-645d-413b-8bb6-1d81b8f329ea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/9f06c823-645d-413b-8bb6-1d81b8f329ea.png -------------------------------------------------------------------------------- /images/SpringSecurity/a20e06a4-5a43-4edf-bea1-53fc9bc929e9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/a20e06a4-5a43-4edf-bea1-53fc9bc929e9.png -------------------------------------------------------------------------------- /images/SpringSecurity/a5c61feb-ca72-4768-94bd-1b0a8cf8af70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/a5c61feb-ca72-4768-94bd-1b0a8cf8af70.png -------------------------------------------------------------------------------- /images/SpringSecurity/c365e5ab-a7a3-4ebf-8a25-09cd2e049f22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/c365e5ab-a7a3-4ebf-8a25-09cd2e049f22.png -------------------------------------------------------------------------------- /images/SpringSecurity/c6a7370c-4afb-4c5d-aa35-ba9c3406b1ed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/c6a7370c-4afb-4c5d-aa35-ba9c3406b1ed.png -------------------------------------------------------------------------------- /images/SpringSecurity/c7ef78df-c2ab-4f89-b5ad-45561a91ffcc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/c7ef78df-c2ab-4f89-b5ad-45561a91ffcc.png -------------------------------------------------------------------------------- /images/SpringSecurity/ccd16b38-d724-4c03-949e-3b6ba03268a9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/ccd16b38-d724-4c03-949e-3b6ba03268a9.png -------------------------------------------------------------------------------- /images/SpringSecurity/cd7aee86-66f8-4197-99d1-1c9275e33bee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/cd7aee86-66f8-4197-99d1-1c9275e33bee.png -------------------------------------------------------------------------------- /images/SpringSecurity/cd7d6cb9-c6e7-4570-aab8-309adcb15e16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/cd7d6cb9-c6e7-4570-aab8-309adcb15e16.png -------------------------------------------------------------------------------- /images/SpringSecurity/d6bd19a2-08d3-4ba6-921c-5b5f57370a16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/d6bd19a2-08d3-4ba6-921c-5b5f57370a16.jpg -------------------------------------------------------------------------------- /images/SpringSecurity/d6e99143-6207-43a5-8d04-f0c81baa11b4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/d6e99143-6207-43a5-8d04-f0c81baa11b4.png -------------------------------------------------------------------------------- /images/SpringSecurity/d9ae84ae-d60c-4d9c-a7fd-cddeb1142f95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/d9ae84ae-d60c-4d9c-a7fd-cddeb1142f95.png -------------------------------------------------------------------------------- /images/SpringSecurity/e7a1a684-64db-41d0-a5c0-d9a841d86cc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/e7a1a684-64db-41d0-a5c0-d9a841d86cc1.png -------------------------------------------------------------------------------- /images/SpringSecurity/eb7a5916-4049-4682-9a11-10f1f1f94c74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/eb7a5916-4049-4682-9a11-10f1f1f94c74.png -------------------------------------------------------------------------------- /images/SpringSecurity/ec39a9f6-c97d-4b7d-8843-d20358c1d194.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/ec39a9f6-c97d-4b7d-8843-d20358c1d194.png -------------------------------------------------------------------------------- /images/SpringSecurity/ec796a9b-7c65-49a2-9f9f-7685af7bd57b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/ec796a9b-7c65-49a2-9f9f-7685af7bd57b.png -------------------------------------------------------------------------------- /images/SpringSecurity/ed65fd2a-8a9f-4808-bc16-36128b4af47a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/ed65fd2a-8a9f-4808-bc16-36128b4af47a.png -------------------------------------------------------------------------------- /images/SpringSecurity/ef28372b-de89-46ff-8679-8b8feca04a7a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/ef28372b-de89-46ff-8679-8b8feca04a7a.png -------------------------------------------------------------------------------- /images/SpringSecurity/f045b025-bd97-4222-8a02-51634be6745b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/f045b025-bd97-4222-8a02-51634be6745b.png -------------------------------------------------------------------------------- /images/SpringSecurity/fb22f2ca-3d9a-420f-b77a-f9c0f737d9ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/fb22f2ca-3d9a-420f-b77a-f9c0f737d9ad.png -------------------------------------------------------------------------------- /images/SpringSecurity/fcdab503-2735-46bd-a5b6-226dc348e78c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/fcdab503-2735-46bd-a5b6-226dc348e78c.png -------------------------------------------------------------------------------- /images/SpringSecurity/image-20210811091508157.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/image-20210811091508157.png -------------------------------------------------------------------------------- /images/SpringSecurity/image-20210811091633434.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/image-20210811091633434.png -------------------------------------------------------------------------------- /images/SpringSecurity/image-20210811091659121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/image-20210811091659121.png -------------------------------------------------------------------------------- /images/SpringSecurity/image-20210811091719470.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/image-20210811091719470.png -------------------------------------------------------------------------------- /images/SpringSecurity/image-20210811091755498.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/image-20210811091755498.png -------------------------------------------------------------------------------- /images/SpringSecurity/image-20210811091815473.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/image-20210811091815473.png -------------------------------------------------------------------------------- /images/SpringSecurity/image-20210811091833065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/image-20210811091833065.png -------------------------------------------------------------------------------- /images/SpringSecurity/image-20210811092048784.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/SpringSecurity/image-20210811092048784.png -------------------------------------------------------------------------------- /images/Tomcat/Servlet主要类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/Tomcat/Servlet主要类图.png -------------------------------------------------------------------------------- /images/appreciateCode.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/appreciateCode.JPG -------------------------------------------------------------------------------- /images/github-doocs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/github-doocs.png -------------------------------------------------------------------------------- /images/mybatis/1575890354400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575890354400.png -------------------------------------------------------------------------------- /images/mybatis/1575890475839.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575890475839.png -------------------------------------------------------------------------------- /images/mybatis/1575891988804.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575891988804.png -------------------------------------------------------------------------------- /images/mybatis/1575892046692.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575892046692.png -------------------------------------------------------------------------------- /images/mybatis/1575892167982.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575892167982.png -------------------------------------------------------------------------------- /images/mybatis/1575892414120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575892414120.png -------------------------------------------------------------------------------- /images/mybatis/1575892511471.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575892511471.png -------------------------------------------------------------------------------- /images/mybatis/1575892645405.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575892645405.png -------------------------------------------------------------------------------- /images/mybatis/1575892687076.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575892687076.png -------------------------------------------------------------------------------- /images/mybatis/1575892763661.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575892763661.png -------------------------------------------------------------------------------- /images/mybatis/1575894218362.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1575894218362.png -------------------------------------------------------------------------------- /images/mybatis/1576027453035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576027453035.png -------------------------------------------------------------------------------- /images/mybatis/1576027589468.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576027589468.png -------------------------------------------------------------------------------- /images/mybatis/1576027736912.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576027736912.png -------------------------------------------------------------------------------- /images/mybatis/1576028186530.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576028186530.png -------------------------------------------------------------------------------- /images/mybatis/1576028554094.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576028554094.png -------------------------------------------------------------------------------- /images/mybatis/1576028709743.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576028709743.png -------------------------------------------------------------------------------- /images/mybatis/1576041628806.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576041628806.png -------------------------------------------------------------------------------- /images/mybatis/1576041889664.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576041889664.png -------------------------------------------------------------------------------- /images/mybatis/1576050247445.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576050247445.png -------------------------------------------------------------------------------- /images/mybatis/1576050482190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576050482190.png -------------------------------------------------------------------------------- /images/mybatis/1576050580581.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576050580581.png -------------------------------------------------------------------------------- /images/mybatis/1576050742205.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576050742205.png -------------------------------------------------------------------------------- /images/mybatis/1576110788523.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576110788523.png -------------------------------------------------------------------------------- /images/mybatis/1576111307305.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576111307305.png -------------------------------------------------------------------------------- /images/mybatis/1576112853347.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576112853347.png -------------------------------------------------------------------------------- /images/mybatis/1576112946984.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576112946984.png -------------------------------------------------------------------------------- /images/mybatis/1576113272209.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576113272209.png -------------------------------------------------------------------------------- /images/mybatis/1576113287640.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576113287640.png -------------------------------------------------------------------------------- /images/mybatis/1576113345527.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576113345527.png -------------------------------------------------------------------------------- /images/mybatis/1576113398394.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576113398394.png -------------------------------------------------------------------------------- /images/mybatis/1576113864895.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576113864895.png -------------------------------------------------------------------------------- /images/mybatis/1576114794663.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576114794663.png -------------------------------------------------------------------------------- /images/mybatis/1576114876295.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576114876295.png -------------------------------------------------------------------------------- /images/mybatis/1576114996613.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576114996613.png -------------------------------------------------------------------------------- /images/mybatis/1576117177349.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576117177349.png -------------------------------------------------------------------------------- /images/mybatis/1576117195387.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576117195387.png -------------------------------------------------------------------------------- /images/mybatis/1576117304942.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576117304942.png -------------------------------------------------------------------------------- /images/mybatis/1576311527726.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576311527726.png -------------------------------------------------------------------------------- /images/mybatis/1576311999030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576311999030.png -------------------------------------------------------------------------------- /images/mybatis/1576312524112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576312524112.png -------------------------------------------------------------------------------- /images/mybatis/1576312612783.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576312612783.png -------------------------------------------------------------------------------- /images/mybatis/1576312777050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576312777050.png -------------------------------------------------------------------------------- /images/mybatis/1576313598939.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/1576313598939.png -------------------------------------------------------------------------------- /images/mybatis/Cache组件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/Cache组件.png -------------------------------------------------------------------------------- /images/mybatis/DefaultSqlSession方法调用栈.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/DefaultSqlSession方法调用栈.png -------------------------------------------------------------------------------- /images/mybatis/image-20191217103309934.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191217103309934.png -------------------------------------------------------------------------------- /images/mybatis/image-20191217104008186.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191217104008186.png -------------------------------------------------------------------------------- /images/mybatis/image-20191217104450495.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191217104450495.png -------------------------------------------------------------------------------- /images/mybatis/image-20191217143939247.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191217143939247.png -------------------------------------------------------------------------------- /images/mybatis/image-20191217144453261.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191217144453261.png -------------------------------------------------------------------------------- /images/mybatis/image-20191217144739434.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191217144739434.png -------------------------------------------------------------------------------- /images/mybatis/image-20191217145051629.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191217145051629.png -------------------------------------------------------------------------------- /images/mybatis/image-20191217145607956.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191217145607956.png -------------------------------------------------------------------------------- /images/mybatis/image-20191217183853550.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191217183853550.png -------------------------------------------------------------------------------- /images/mybatis/image-20191218082628696.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191218082628696.png -------------------------------------------------------------------------------- /images/mybatis/image-20191218191512184.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191218191512184.png -------------------------------------------------------------------------------- /images/mybatis/image-20191218191550550.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191218191550550.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219083223084.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219083223084.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219083344439.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219083344439.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219083354873.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219083354873.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219084455292.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219084455292.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219084943102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219084943102.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219085131167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219085131167.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219092442456.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219092442456.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219093043035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219093043035.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219100446796.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219100446796.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219151245509.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219151245509.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219151247240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219151247240.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219151408597.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219151408597.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219152254274.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219152254274.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219152502960.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219152502960.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219152655746.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219152655746.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219153341466.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219153341466.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219153553127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219153553127.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219155129772.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219155129772.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219160832704.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219160832704.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219160908212.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219160908212.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219161555793.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219161555793.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219162258040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219162258040.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219162402291.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219162402291.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219162506920.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219162506920.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219163628214.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219163628214.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219163640968.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219163640968.png -------------------------------------------------------------------------------- /images/mybatis/image-20191219163957488.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191219163957488.png -------------------------------------------------------------------------------- /images/mybatis/image-20191223081023730.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191223081023730.png -------------------------------------------------------------------------------- /images/mybatis/image-20191223083610214.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191223083610214.png -------------------------------------------------------------------------------- /images/mybatis/image-20191223083732972.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191223083732972.png -------------------------------------------------------------------------------- /images/mybatis/image-20191223100956713.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/image-20191223100956713.png -------------------------------------------------------------------------------- /images/mybatis/数据库连接池流程图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis/数据库连接池流程图.png -------------------------------------------------------------------------------- /images/mybatis连接池获取连接逻辑图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/mybatis连接池获取连接逻辑图.png -------------------------------------------------------------------------------- /images/nacos/image-20200821111938485.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/nacos/image-20200821111938485.png -------------------------------------------------------------------------------- /images/nacos/image-20200821132413628.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/nacos/image-20200821132413628.png -------------------------------------------------------------------------------- /images/nacos/image-20200821133350982.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/nacos/image-20200821133350982.png -------------------------------------------------------------------------------- /images/nacos/image-20200821133445090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/nacos/image-20200821133445090.png -------------------------------------------------------------------------------- /images/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/pdf.png -------------------------------------------------------------------------------- /images/qrcode-for-doocs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/qrcode-for-doocs.jpg -------------------------------------------------------------------------------- /images/qrcode-for-yanglbme.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/qrcode-for-yanglbme.jpg -------------------------------------------------------------------------------- /images/repository-template-demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/repository-template-demo.png -------------------------------------------------------------------------------- /images/spring/BeanFactory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/BeanFactory.png -------------------------------------------------------------------------------- /images/spring/BeanNameGenerator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/BeanNameGenerator.png -------------------------------------------------------------------------------- /images/spring/DateTimeFormatAnnotationFormatterFactory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/DateTimeFormatAnnotationFormatterFactory.png -------------------------------------------------------------------------------- /images/spring/Mergeable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/Mergeable.png -------------------------------------------------------------------------------- /images/spring/MethodOverride.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/MethodOverride.png -------------------------------------------------------------------------------- /images/spring/MultiValueMap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/MultiValueMap.png -------------------------------------------------------------------------------- /images/spring/MutablePropertyValues-构造.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/MutablePropertyValues-构造.png -------------------------------------------------------------------------------- /images/spring/Parser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/Parser.png -------------------------------------------------------------------------------- /images/spring/PropertyPlaceholderConfigurerResolver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/PropertyPlaceholderConfigurerResolver.png -------------------------------------------------------------------------------- /images/spring/PropertySource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/PropertySource.png -------------------------------------------------------------------------------- /images/spring/PropertyValue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/PropertyValue.png -------------------------------------------------------------------------------- /images/spring/PropertyValues.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/PropertyValues.png -------------------------------------------------------------------------------- /images/spring/RootBeanDefinition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/RootBeanDefinition.png -------------------------------------------------------------------------------- /images/spring/SystemPropertyUtils-resolvePlaceholders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/SystemPropertyUtils-resolvePlaceholders.png -------------------------------------------------------------------------------- /images/spring/TemplateAwareExpressionParser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/TemplateAwareExpressionParser.png -------------------------------------------------------------------------------- /images/spring/image-20191231142829639.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20191231142829639.png -------------------------------------------------------------------------------- /images/spring/image-20191231162505748.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20191231162505748.png -------------------------------------------------------------------------------- /images/spring/image-20191231164622063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20191231164622063.png -------------------------------------------------------------------------------- /images/spring/image-20191231165638975.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20191231165638975.png -------------------------------------------------------------------------------- /images/spring/image-20200101093742238.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200101093742238.png -------------------------------------------------------------------------------- /images/spring/image-20200101100906778.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200101100906778.png -------------------------------------------------------------------------------- /images/spring/image-20200101111755022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200101111755022.png -------------------------------------------------------------------------------- /images/spring/image-20200101155451199.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200101155451199.png -------------------------------------------------------------------------------- /images/spring/image-20200101155539501.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200101155539501.png -------------------------------------------------------------------------------- /images/spring/image-20200102083512005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200102083512005.png -------------------------------------------------------------------------------- /images/spring/image-20200102085031641.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200102085031641.png -------------------------------------------------------------------------------- /images/spring/image-20200102091421516.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200102091421516.png -------------------------------------------------------------------------------- /images/spring/image-20200108081404857.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200108081404857.png -------------------------------------------------------------------------------- /images/spring/image-20200108081623427.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200108081623427.png -------------------------------------------------------------------------------- /images/spring/image-20200108082335031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200108082335031.png -------------------------------------------------------------------------------- /images/spring/image-20200109084131415.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109084131415.png -------------------------------------------------------------------------------- /images/spring/image-20200109085606240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109085606240.png -------------------------------------------------------------------------------- /images/spring/image-20200109090456547.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109090456547.png -------------------------------------------------------------------------------- /images/spring/image-20200109090655157.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109090655157.png -------------------------------------------------------------------------------- /images/spring/image-20200109091216505.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109091216505.png -------------------------------------------------------------------------------- /images/spring/image-20200109092801572.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109092801572.png -------------------------------------------------------------------------------- /images/spring/image-20200109093242494.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109093242494.png -------------------------------------------------------------------------------- /images/spring/image-20200109094032421.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109094032421.png -------------------------------------------------------------------------------- /images/spring/image-20200109094649217.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109094649217.png -------------------------------------------------------------------------------- /images/spring/image-20200109094654409.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109094654409.png -------------------------------------------------------------------------------- /images/spring/image-20200109150841916.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200109150841916.png -------------------------------------------------------------------------------- /images/spring/image-20200110093044672.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200110093044672.png -------------------------------------------------------------------------------- /images/spring/image-20200115083744268.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200115083744268.png -------------------------------------------------------------------------------- /images/spring/image-20200115084031725.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200115084031725.png -------------------------------------------------------------------------------- /images/spring/image-20200115093602651.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200115093602651.png -------------------------------------------------------------------------------- /images/spring/image-20200115105941265.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200115105941265.png -------------------------------------------------------------------------------- /images/spring/image-20200115141708702.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200115141708702.png -------------------------------------------------------------------------------- /images/spring/image-20200115143315633.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200115143315633.png -------------------------------------------------------------------------------- /images/spring/image-20200115143456554.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200115143456554.png -------------------------------------------------------------------------------- /images/spring/image-20200116085344737.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200116085344737.png -------------------------------------------------------------------------------- /images/spring/image-20200116085423073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200116085423073.png -------------------------------------------------------------------------------- /images/spring/image-20200116085726577.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200116085726577.png -------------------------------------------------------------------------------- /images/spring/image-20200116085737632.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200116085737632.png -------------------------------------------------------------------------------- /images/spring/image-20200116085927359.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200116085927359.png -------------------------------------------------------------------------------- /images/spring/image-20200116092259944.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200116092259944.png -------------------------------------------------------------------------------- /images/spring/image-20200116141838601.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200116141838601.png -------------------------------------------------------------------------------- /images/spring/image-20200116141932486.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200116141932486.png -------------------------------------------------------------------------------- /images/spring/image-20200117104710142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200117104710142.png -------------------------------------------------------------------------------- /images/spring/image-20200117110115741.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200117110115741.png -------------------------------------------------------------------------------- /images/spring/image-20200117110846256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200117110846256.png -------------------------------------------------------------------------------- /images/spring/image-20200117111131406.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200117111131406.png -------------------------------------------------------------------------------- /images/spring/image-20200117133325461.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200117133325461.png -------------------------------------------------------------------------------- /images/spring/image-20200117141309038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200117141309038.png -------------------------------------------------------------------------------- /images/spring/image-20200117141519123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200117141519123.png -------------------------------------------------------------------------------- /images/spring/image-20200117142800671.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200117142800671.png -------------------------------------------------------------------------------- /images/spring/image-20200117143022827.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200117143022827.png -------------------------------------------------------------------------------- /images/spring/image-20200119085346675.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119085346675.png -------------------------------------------------------------------------------- /images/spring/image-20200119085655734.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119085655734.png -------------------------------------------------------------------------------- /images/spring/image-20200119101017989.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119101017989.png -------------------------------------------------------------------------------- /images/spring/image-20200119101026726.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119101026726.png -------------------------------------------------------------------------------- /images/spring/image-20200119101107820.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119101107820.png -------------------------------------------------------------------------------- /images/spring/image-20200119101516591.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119101516591.png -------------------------------------------------------------------------------- /images/spring/image-20200119141937915.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119141937915.png -------------------------------------------------------------------------------- /images/spring/image-20200119143046066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119143046066.png -------------------------------------------------------------------------------- /images/spring/image-20200119144019171.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119144019171.png -------------------------------------------------------------------------------- /images/spring/image-20200119145138205.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119145138205.png -------------------------------------------------------------------------------- /images/spring/image-20200119163638222.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119163638222.png -------------------------------------------------------------------------------- /images/spring/image-20200119164149650.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119164149650.png -------------------------------------------------------------------------------- /images/spring/image-20200119164402137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119164402137.png -------------------------------------------------------------------------------- /images/spring/image-20200119164410301.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200119164410301.png -------------------------------------------------------------------------------- /images/spring/image-20200226082614312.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226082614312.png -------------------------------------------------------------------------------- /images/spring/image-20200226083247784.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226083247784.png -------------------------------------------------------------------------------- /images/spring/image-20200226084056993.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226084056993.png -------------------------------------------------------------------------------- /images/spring/image-20200226084200428.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226084200428.png -------------------------------------------------------------------------------- /images/spring/image-20200226084400939.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226084400939.png -------------------------------------------------------------------------------- /images/spring/image-20200226084514795.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226084514795.png -------------------------------------------------------------------------------- /images/spring/image-20200226084640683.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226084640683.png -------------------------------------------------------------------------------- /images/spring/image-20200226084914000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226084914000.png -------------------------------------------------------------------------------- /images/spring/image-20200226084923783.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226084923783.png -------------------------------------------------------------------------------- /images/spring/image-20200226085433130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226085433130.png -------------------------------------------------------------------------------- /images/spring/image-20200226085440865.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226085440865.png -------------------------------------------------------------------------------- /images/spring/image-20200226085727426.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226085727426.png -------------------------------------------------------------------------------- /images/spring/image-20200226085839496.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226085839496.png -------------------------------------------------------------------------------- /images/spring/image-20200226090042946.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226090042946.png -------------------------------------------------------------------------------- /images/spring/image-20200226090315865.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226090315865.png -------------------------------------------------------------------------------- /images/spring/image-20200226090432052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226090432052.png -------------------------------------------------------------------------------- /images/spring/image-20200226090650154.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226090650154.png -------------------------------------------------------------------------------- /images/spring/image-20200226090719108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226090719108.png -------------------------------------------------------------------------------- /images/spring/image-20200226090827849.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226090827849.png -------------------------------------------------------------------------------- /images/spring/image-20200226090945418.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200226090945418.png -------------------------------------------------------------------------------- /images/spring/image-20200728094658684.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200728094658684.png -------------------------------------------------------------------------------- /images/spring/image-20200728105926218.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200728105926218.png -------------------------------------------------------------------------------- /images/spring/image-20200728133037075.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200728133037075.png -------------------------------------------------------------------------------- /images/spring/image-20200729090322058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200729090322058.png -------------------------------------------------------------------------------- /images/spring/image-20200729144622440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200729144622440.png -------------------------------------------------------------------------------- /images/spring/image-20200729145518089.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200729145518089.png -------------------------------------------------------------------------------- /images/spring/image-20200729145637688.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200729145637688.png -------------------------------------------------------------------------------- /images/spring/image-20200729145835608.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200729145835608.png -------------------------------------------------------------------------------- /images/spring/image-20200729160650401.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200729160650401.png -------------------------------------------------------------------------------- /images/spring/image-20200729161647214.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200729161647214.png -------------------------------------------------------------------------------- /images/spring/image-20200729162023837.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200729162023837.png -------------------------------------------------------------------------------- /images/spring/image-20200729163303000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200729163303000.png -------------------------------------------------------------------------------- /images/spring/image-20200824094154847.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200824094154847.png -------------------------------------------------------------------------------- /images/spring/image-20200824104529315.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200824104529315.png -------------------------------------------------------------------------------- /images/spring/image-20200902102912716.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200902102912716.png -------------------------------------------------------------------------------- /images/spring/image-20200902103154580.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200902103154580.png -------------------------------------------------------------------------------- /images/spring/image-20200902105454958.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200902105454958.png -------------------------------------------------------------------------------- /images/spring/image-20200903091759451.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200903091759451.png -------------------------------------------------------------------------------- /images/spring/image-20200903111128603.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200903111128603.png -------------------------------------------------------------------------------- /images/spring/image-20200903150738285.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200903150738285.png -------------------------------------------------------------------------------- /images/spring/image-20200903150930186.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200903150930186.png -------------------------------------------------------------------------------- /images/spring/image-20200903153057321.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200903153057321.png -------------------------------------------------------------------------------- /images/spring/image-20200903153432559.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200903153432559.png -------------------------------------------------------------------------------- /images/spring/image-20200903153533141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200903153533141.png -------------------------------------------------------------------------------- /images/spring/image-20200903153617353.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20200903153617353.png -------------------------------------------------------------------------------- /images/spring/image-20210902072224002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20210902072224002.png -------------------------------------------------------------------------------- /images/spring/image-20210903080803199.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20210903080803199.png -------------------------------------------------------------------------------- /images/spring/image-20210904161436139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20210904161436139.png -------------------------------------------------------------------------------- /images/spring/image-20210904161808341.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20210904161808341.png -------------------------------------------------------------------------------- /images/spring/image-20210904162844126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20210904162844126.png -------------------------------------------------------------------------------- /images/spring/image-20210904174616712.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20210904174616712.png -------------------------------------------------------------------------------- /images/spring/image-20211213224509864.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20211213224509864.png -------------------------------------------------------------------------------- /images/spring/image-20211213224920994.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20211213224920994.png -------------------------------------------------------------------------------- /images/spring/image-20211213225044814.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20211213225044814.png -------------------------------------------------------------------------------- /images/spring/image-20211213225124831.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20211213225124831.png -------------------------------------------------------------------------------- /images/spring/image-20211213225330193.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20211213225330193.png -------------------------------------------------------------------------------- /images/spring/image-20211213225748030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20211213225748030.png -------------------------------------------------------------------------------- /images/spring/image-20211213225831583.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20211213225831583.png -------------------------------------------------------------------------------- /images/spring/image-20211213225953964.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20211213225953964.png -------------------------------------------------------------------------------- /images/spring/image-20211213230042502.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20211213230042502.png -------------------------------------------------------------------------------- /images/spring/image-20211213230212297.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/image-20211213230212297.png -------------------------------------------------------------------------------- /images/spring/循环依赖.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/spring/循环依赖.png -------------------------------------------------------------------------------- /images/springMVC/DispatcherServlet的处理过程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/DispatcherServlet的处理过程.png -------------------------------------------------------------------------------- /images/springMVC/DispatcherServlet的继承关系.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/DispatcherServlet的继承关系.png -------------------------------------------------------------------------------- /images/springMVC/HandlerMapping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/HandlerMapping.png -------------------------------------------------------------------------------- /images/springMVC/HandlerMapping组件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/HandlerMapping组件.png -------------------------------------------------------------------------------- /images/springMVC/SimpleUrlHandlerMapping的继承关系.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/SimpleUrlHandlerMapping的继承关系.png -------------------------------------------------------------------------------- /images/springMVC/WebApplicationContext接口的类继承关系.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/WebApplicationContext接口的类继承关系.png -------------------------------------------------------------------------------- /images/springMVC/Web容器启动spring应用程序过程图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/Web容器启动spring应用程序过程图.png -------------------------------------------------------------------------------- /images/springMVC/clazz/image-20200123085741347.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/clazz/image-20200123085741347.png -------------------------------------------------------------------------------- /images/springMVC/clazz/image-20200123085756168.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/clazz/image-20200123085756168.png -------------------------------------------------------------------------------- /images/springMVC/clazz/image-20200123085946476.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/clazz/image-20200123085946476.png -------------------------------------------------------------------------------- /images/springMVC/clazz/image-20200123090442409.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/clazz/image-20200123090442409.png -------------------------------------------------------------------------------- /images/springMVC/clazz/image-20200123090851644.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/clazz/image-20200123090851644.png -------------------------------------------------------------------------------- /images/springMVC/clazz/image-20200123091445694.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/clazz/image-20200123091445694.png -------------------------------------------------------------------------------- /images/springMVC/clazz/image-20200123093032179.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/clazz/image-20200123093032179.png -------------------------------------------------------------------------------- /images/springMVC/clazz/image-20200123093733129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/clazz/image-20200123093733129.png -------------------------------------------------------------------------------- /images/springMVC/clazz/image-20200123094439617.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/clazz/image-20200123094439617.png -------------------------------------------------------------------------------- /images/springMVC/clazz/image-20200918130340555.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/clazz/image-20200918130340555.png -------------------------------------------------------------------------------- /images/springMVC/image-20200915135933146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springMVC/image-20200915135933146.png -------------------------------------------------------------------------------- /images/springTransaction/PlatformTransactionManager组件的设计.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springTransaction/PlatformTransactionManager组件的设计.png -------------------------------------------------------------------------------- /images/springTransaction/Spring事务处理模块类层次结构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springTransaction/Spring事务处理模块类层次结构.png -------------------------------------------------------------------------------- /images/springTransaction/createMainInterceptor()方法的调用链.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springTransaction/createMainInterceptor()方法的调用链.png -------------------------------------------------------------------------------- /images/springTransaction/实现DataSourceTransactionManager的时序图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springTransaction/实现DataSourceTransactionManager的时序图.png -------------------------------------------------------------------------------- /images/springTransaction/调用createTransactionIfNecessary()方法的时序图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springTransaction/调用createTransactionIfNecessary()方法的时序图.png -------------------------------------------------------------------------------- /images/springmessage/image-20200304085303580.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springmessage/image-20200304085303580.png -------------------------------------------------------------------------------- /images/springmessage/image-20200304092154712.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springmessage/image-20200304092154712.png -------------------------------------------------------------------------------- /images/springmessage/image-20200305085013723.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springmessage/image-20200305085013723.png -------------------------------------------------------------------------------- /images/springmessage/image-20200305085845017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springmessage/image-20200305085845017.png -------------------------------------------------------------------------------- /images/springmessage/image-20200305090846313.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/springmessage/image-20200305090846313.png -------------------------------------------------------------------------------- /images/use-this-template-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/use-this-template-button.png -------------------------------------------------------------------------------- /images/动态代理原理图1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/动态代理原理图1.png -------------------------------------------------------------------------------- /images/动态代理原理图2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DerekYRC/source-code-hunter/567859b4e1f9255bb780f6e939ddac7442ddace7/images/动态代理原理图2.png -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "github": { 3 | "silent": true 4 | } 5 | } --------------------------------------------------------------------------------