源码解读
文章平均质量分 95
java源码解读
hancoder
谢谢支持
展开
-
【SpringMVC】源码阅读
一、框架预览二、定义与对象首先必须了解处理器即handler是什么:你在前期可以直接理解为controller方法HttpServlet定义了规范, 但是如果不重写doGet方法的话就会报错FrameworkServlet重写了doGet(),实现了HttpServletBeanDispatcherServlet:派发到处理器上HanlderInterceptor,接口3个方法preHandle//请求开始之前postHandle//请求结束之后,画面渲染之前af.原创 2021-09-13 17:32:48 · 850 阅读 · 0 评论 -
【JVM】类加载源码、SPI、线程上下文类加载器TCCL
说明:本文虽然借鉴了网络的部分内容,但是由于网络上内容基本都是摘抄JVM书来的,有的地方很晦涩难懂,尤其是SPI和线程上下文类加载器TCCL那里。本文通过根据jdbc的驱动加载过程,跟踪双亲委派源码、rt.jar、Class.forName、SPI、TCCL的执行顺序,分析了它们之间的关系。总结完收获很大,希望你也有所收获各小节没有标序号,但大章节序号是有的,慢慢看即可,我花了一整天整理学习。不说了,去睡觉了类的使用流程:是否加载了该类没有加载:使用类加载器加载该类加载了:链接–初始化.原创 2021-07-04 01:45:19 · 867 阅读 · 2 评论 -
【spring源码】十二、监听器
spring监听器一、ApplicationListener接口作用:监听容器中发布的事件,完成事件驱动开发实现ApplicationListener接口//如果要写实现类就得实现这个接口public interface ApplicationListener<E extends ApplicationEvent> //泛型是要监听的事件,监听ApplicationEvent及其下面的子事件。即我们要发布事件,这个事件应该是ApplicationEvent的子类 extends原创 2020-12-20 02:25:25 · 883 阅读 · 3 评论 -
【spring源码】十一、事务
3.声明式事务都是针对于 ServiceImpl 类下方法的.4.事务管理器基于通知(advice)的.5.在 spring 配置文件中配置声明式事务<context:property-placeholder location="classpath:db.properties,classpath:second.properties"/><!-- 定义数据源bean,使用C3P0数据源实现 --><bean id="dataSource"class="org.sprin原创 2020-12-20 02:24:50 · 464 阅读 · 1 评论 -
【spring源码】十、spring如何整合其他框架
在前面,待整理原创 2020-12-20 02:24:01 · 797 阅读 · 2 评论 -
【spring源码】九、spring动态代理的创建
文章目录⑪==finishBeanFactoryIntialization==preInstantiateSingletons重温createBeanresolveBeforeInstantiationapplyBeanPostProcessorsBeforeInstantiationibp.postProcessBeforeInstantiationdoCreateBean==postProcessAfterInitialization====wrapIfNecessary==InstantiationM原创 2020-12-20 02:23:09 · 665 阅读 · 2 评论 -
【spring源码】八、循环依赖(重要)
getBean流程:doGetBeangetSingleton1singletionObject.get(beanName);有则直接返回earlySingletonObjects.get(beanName);有则直接返回singletonFactories.get(beanName);没有就直接返回singletonFactories.get(beanName);获取到了工厂singletonObject=singletonFactory.getObject();earlySing原创 2020-12-20 02:21:14 · 707 阅读 · 1 评论 -
【spring源码】七、后置处理器BeanPostProcessor
⑥registerBeanPostProcessors()注册(实例化)后置处理器我们想要了解spring在什么时候注册自动代理,即@EnableAspectJAutoProxy等一系列执行的时机。这里值得注意的是,@EnableAspectJAutoProxy的操作是在refresh()方法的invoke()阶段完成了bean定义信息的注入,而还没完成实例化。实例化是在registerBeanPostProcessor注册后置处理器阶段完成的。public abstract class Abstra原创 2020-12-20 02:20:41 · 298 阅读 · 1 评论 -
【spring源码】六、@EnableAspectJAutoProxy
⑤invokeBeanFactoryPostProcessors()先说明:invokeBeanFactoryPostProcessors()是在refresh()方法中的第⑤步,他的作用是注册bean的定义信息,但还没进行创建实例。我们下面介绍了注解@EnableAspectJAutoProxy就是在这个阶段注册一个bean定义,但实例化要推迟到第⑥步registerBeanPostProcessor()完成@EnableAspectJAutoProxy@EnableAspectJAutoProx原创 2020-12-20 02:19:46 · 1110 阅读 · 1 评论 -
【spring源码】五、工厂后置处理器BeanFactoryPostProcessor【重要】
文章目录一、工厂后置处理器bean定义时候什么被装入源码-工厂后置处理器工厂后置处理器与`ConfigurationClassPostProcessor`spring的工厂后置处理器和自定义工厂后置处理器工厂后置处理器的执行时机二、自定义工厂后置处理器(1)BeanFactoryPostProcessor(2)BeanDefinitionRegistryPostProcessor(3)总结三、问题一:AnnotatedBeanDefinitionReader容器构造函数的两种写法四、工厂后置处理器实例化一原创 2020-12-20 02:19:10 · 1453 阅读 · 2 评论 -
【spring源码】四、refresh流程预览
文章目录AOPAOP使用步骤==AOP源码流程==测试用例spring生成的代理类AOPAOP使用步骤导包spring-aspects在配置类上@EnableAspectJAutoProxy 通知方法: 前置通知(@Before):logStart:在目标方法(div)运行之前运行 后置通知(@After):logEnd:在目标方法(div)运行结束之后运行(无论方法正常结束还是异常结束) 返回通知(@AfterReturning):logReturn:在目标方法(原创 2020-12-20 02:12:25 · 464 阅读 · 1 评论 -
【spring源码】三、helloworld准备
文章目录一、工厂后置处理器bean定义时候什么被装入源码-工厂后置处理器工厂后置处理器与`ConfigurationClassPostProcessor`spring的工厂后置处理器和自定义工厂后置处理器工厂后置处理器的执行时机二、自定义工厂后置处理器(1)BeanFactoryPostProcessor(2)BeanDefinitionRegistryPostProcessor(3)总结三、问题一:AnnotatedBeanDefinitionReader容器构造函数的两种写法一、工厂后置处理器按理说原创 2020-12-19 22:21:36 · 308 阅读 · 1 评论 -
【spring源码】二、bean定义、工厂
基础概念1、IoC 和 DIIoC (Inversion of Control),即控制反转。这不是一种新的技术,而是 Spring 的一种设计思想。在传统的程序设计,我们直接在对象内部通过 new 来创建对象,是程序主动去创建依赖对象;而在 Spring 中有专门的一个容器来创建和管理这些对象,并将对象依赖的其他对象注入到该对象中,这个容器我们一般称为 IoC 容器。所有的类的创建、销毁都由 Spring 来控制,也就是说控制对象生存周期的不再是引用它的对象,而是 Spring。对于某个具体的对象原创 2020-12-19 21:24:59 · 1022 阅读 · 1 评论 -
【spring源码】一、注解驱动开发
文章目录原来xml方式注解驱动配置类@Configuration@ComponentScan【bean注册方法1】@Bean【bean注册方法2】@Conditional@Import【bean注册方法3】@FactoryBean【bean注册方法4】组件注册生命周期后置处理器属性赋值@Value自动装配@Autowired+@Qualifier+@PrimaryAware@Profile:AOP声明式事务原来xml方式https://www.jianshu.com/p/2692bf784976Be原创 2020-12-19 19:45:30 · 685 阅读 · 1 评论 -
【mybatis源码】重要对象
mybatis相关Configuration:全局唯一MapperRegistry:mapper注册器,全局唯一,他主要负责addMapper注册的逻辑,和config是互相持有的SqlSessionFactory:全局唯一。xml的解析结果最顶级是解析出来个SqlSessionFactorySqlSession:每个线程都有自己的SqlSessionconfiguration// properties文件的内容Properties variables;// 解析过的mapper.xml。有原创 2020-12-16 03:57:36 · 305 阅读 · 2 评论 -
【mybatis源码】3、插件源码分析
请先看: mybatis源码分析:https://blog.csdn.net/hancoder/article/details/110152732Mybatis允许我们在四大对象执行的过程中对其指定方法进行拦截,这样就可以很方便了进行功能的增强,这个功能跟Spring的切面编程非常类似。文章目录helloworld预热jdbcmybatis四大对象插件原理插件的代理来源代理执行器①getSignatureMap(interceptor)②getAllInterfaces③Proxy.newProxyIn原创 2020-12-09 01:18:30 · 335 阅读 · 0 评论 -
【mybatis源码】2、解析、执行器、缓存、动态代理
参考:https://blog.csdn.net/lchpersonal521/article/details/84451357前言:设计模式的Builder建造者模式很重要动态代理模式也得看会才能看这个,最起码invocationHandler和invoke知道怎么回事主要内容:动态代理MapperProxySQL会话SqlSession(门面,里面有executor指向执行器,jdbc指向方法里只有改和查)执行器Executor(实现)SimpleExecutor。查询5个参原创 2020-11-26 00:28:55 · 758 阅读 · 1 评论 -
【java多线程】4、AtomicInteger+AQS+ReentrantLock源码
Atomic高并发的情况下,i++无法保证原子性,往往会出现问题,所以引入AtomicInteger类。线程不安全示例我们分别累加普通变量、volatile变量、AtomicInteger变量public class TestAtomicInteger { private static final int THREADS_COUNT = 2; public static int count = 0; public static volatile int countVolat原创 2020-08-07 00:23:08 · 1710 阅读 · 0 评论 -
HashMap、ConcurrentHashMap、jdk7/8,全解析
下载地址(已将图片传到云端,md文件方便浏览更改):https://download.csdn.net/download/hancoder/12318377对应视频地址:https://www.bilibili.com/video/BV1FE411t7M7在线预览地址:https://blog.csdn.net/hancoder/article/details/105424922一 HashMap(源码级解读)1.HashMap简介 HashMap基于哈希表的Map接口实现,是以key-valu原创 2020-08-06 02:14:57 · 750 阅读 · 0 评论 -
java动态代理
在java的动态代理机制中,有两个重要的类或接口,InvocationHandler(Interface)Proxy(Class)首先我们先来看看java的API帮助文档是怎么样对这两个类进行描述的:InvocationHandler:InvocationHandler is the interface implemented by the invocation handler of a proxy instance. 每一个动态代理类都必须要实现InvocationHandler这个接口,原创 2020-07-10 18:08:16 · 1354 阅读 · 0 评论