源码解读系列
文章平均质量分 89
以spring,springboot,mybatis,dubbo等开源框架源码解读为主
IT爱好者123456
熟练掌握Linux操作系统的基本操作及shell编程;
熟练掌握前端技术html,css,javascript,jquery,jqueryUI;
熟练常用框架Hibernate,Jpa,Spring,mybatis,struts2等;
熟悉Oracle和MySQL数据库,能结合项目需求独立完成数据库设计,存储过程,视图的编写,掌握基本的数据库性能优化;
熟练掌握Java与Js以及C与C++之间的通信,以及WebService技术;
熟悉Tomcat,JBOSS服务器及EJB技术。
熟悉solr,lucene搜索引擎技术
熟悉mina,netty消息推送
熟悉jboss消息队列, activeMQ消息队列
熟悉maven,nginx,freemarker,Memcached, redis,dubbo等
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
源码解读系列-spring源码(二十一)- mvc视图解析渲染
FactoryBean,以Bean结尾,表示它是一个Bean,一般情况下,Spring通过反射机制利用的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在中提供大量的配置信息。配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。该方法的核心是render方法,用来解析并呈现视图和模型。BeanFactory,以Factory结尾,表示它是一个工厂类(接口), 它负责生产和管理bean的一个工厂(IOC容器),在Spring中,原创 2024-05-13 07:45:00 · 984 阅读 · 0 评论 -
源码解读系列-SpringBoot源码(三)- Run方法执行流程(一)
关于 SpringApplication 类的构造过程,到这里我们就梳理完了。纵观 SpringApplication 类的实例化过程,我们可以看到,合理的利用该类,我们能在spring容器创建之前做一些预备工作,和定制化的需求。比如,自定义SpringBoot的Banner,比如自定义事件监听器,再比如在容器refresh之前通过自定义 ApplicationContextInitializer 修改配置一些配置或者获取指定的bean都是可以的。原创 2024-05-16 21:58:14 · 1079 阅读 · 0 评论 -
源码解读系列-SpringBoot源码(四)- Run方法执行流程(二)
在上面createApplicationContext()方法中的, BeanUtils.instantiateClass(contextClass) 这个方法中,不但初始化了AnnotationConfigServletWebServerApplicationContext类,也就是我们的上下文context,同样也触发了GenericApplicationContext类的构造函数,从而beanFactory(IOC容器)也创建了。后面马上就到最最最重要的refresh()方法了。原创 2024-05-17 22:30:29 · 1302 阅读 · 0 评论 -
源码解读系列-SpringBoot源码(二)- 自动配置
自动配置:根据我们添加的jar包依赖,会自动将一些配置类的bean注册进ioc容器,我们可以需要的地方使用@Autowired或者@Resource等注解来使用它。问题:Spring Boot到底是如何进行自动配置的,都把哪些组件进行了自动配置?Spring Boot应用的启动入口是@SpringBootApplication注解标注类中的main()方法,:应用标注在某个类上说明这个类是的主配置类,就应该运行这个类的方法启动应用。下面,查看@SpringBootApplication内部源码进行分析 ,核原创 2024-05-16 21:44:46 · 1412 阅读 · 0 评论 -
源码解读系列-spring源码(二十)- MVC HandlerAdapter handle 方法解析
继续分析,接下来应该调用Controller中的具体方法了,但是在调用之前,还要有参数解析、InitBinder方法初始化、InitBinder方法调用等工作,接下来逐步分析。的异常,如果类上标注了@SessionAttributes注解,且在方法中标注了@ModelAttribute注解,如果@ModelAttribute为空,则会抛出此异常。到这里invokeAndHandle方法的调用就完成了,接下来是getModelAndViewd对返回的模型做了进一步的处理。原创 2024-05-13 07:30:00 · 1069 阅读 · 0 评论 -
源码解读系列-SpringBoot源码(一)- 源码环境搭建及依赖管理
为了充分利用Spring Boot框架的优势,在Spring Boot官方没有整合这些技术框架的情况下,Druid等技术框架所在的开发团队主动与Spring Boot框架进行了整合,实现了各自的依赖启动器,例如druid-spring-boot-starter等。在Spring Boot入门程序中,项目pom.xml文件有两个核心依赖,分别是spring-boot-starter-parent和spring-boot-starter-web,关于这两个依赖的相关介绍具体如下。原创 2024-05-13 08:00:00 · 1422 阅读 · 0 评论 -
源码解读系列-spring源码(十六)- MVC源码环境及父容器
很简单,通过上面的操作,我们就可以确定contextClassName是XmlWebApplicationContext,跟我们之前分析的ApplicationContext差不多,只是在其基础上又提供了对web的支持。时会使用到这个全局变量,因此,Web应用在容器中部署后,进行初始化时会先读取这个全局变量,之后再进行上述讲解的初始化启动过程。红色框是 Servlet 中的接口和类,蓝色框中则是 Spring 中的接口和类。,这里采用的是观察者模式,也称为为订阅-发布模式,实现了该接口的。原创 2024-05-11 23:36:54 · 1110 阅读 · 0 评论 -
源码解读系列-spring源码(十八)- MVC注解
标签默认会开启SpringMVC的注解驱动模式,默认注册一个RequestMappingHandlerMapping、一个RequestMappingHandlerAdapter、一个ExceptionHandlerExceptionResolver。以支持对使用了 @RequestMapping 、 @ExceptionHandler 及其他注解的控制器方法的请求处理。原创 2024-05-12 22:38:51 · 412 阅读 · 0 评论 -
源码解读系列-spring源码(十五)- AOP 一次请求调用全流程
AspectJ 方式的 AOP 内容到此就介绍完毕了,核心流程如下。1)解析 AOP 的注解,并注册对应的内部管理的自动代理创建者的 bean,对于本次介绍是:AnnotationAwareAspectJAutoProxyCreator,其他的还有 InfrastructureAdvisorAutoProxyCreator 和 AspectJAwareAdvisorAutoProxyCreator。原创 2024-05-11 23:22:52 · 717 阅读 · 0 评论 -
源码解读系列-spring源码(十七)- MVC子容器&9大组件
类的子IoC容器创建过程,如果当前Servlet存在一个IoC容器则为其设置根IoC容器作为其父类,并配置刷新该容器,用于构造其定义的Bean,这里的方法与前文讲述的根IoC容器类似,同样会读取用户在web.xml中配置的中的值,用于查找相关的xml配置文件用于构造定义的Bean,这里不再赘述了。答:父子容器类似于类的继承关系,子类可以访问父类中的成员变量,而父类不可访问子类的成员变量,同样的,子容器可以访问父容器中定义的Bean,但父容器无法访问子容器定义的Bean。首先像容器注册一个自定义的。原创 2024-05-12 20:58:52 · 1032 阅读 · 0 评论 -
源码解读系列-spring源码(十九)- MVC 获取handler及HandlerAdapter
Spring会循环所有注册的HandlerMapping并返回第一个匹配的HandlerExecutionChain的。其中handler即Controller本身实例,HandlerInterceptor是一个拦截器,其可以在SpringMVC的请求过过程中在不同的时机回调不同的接口。将上一步获取到的handler转化为HandlerExecutionChain对象,并循环所有注册的HandlerInterceptor并将其加入到HandlerExecutionChain链中。原创 2024-05-12 22:53:19 · 441 阅读 · 0 评论 -
源码解读系列-spring源码(十四)- 创建 AOP 代理的解析II
至此,创建 AOP 代理对象完成。原创 2024-05-11 23:18:08 · 830 阅读 · 0 评论 -
源码解读系列-spring源码(十三)- 创建 AOP 代理的解析I
null) {// 1.判断当前bean是否需要被代理,如果需要则进行封装if (!1.判断当前bean是否需要被代理,如果需要则进行封装,见代码块1。原创 2024-05-11 23:13:57 · 489 阅读 · 1 评论 -
源码解读系列-spring源码(十二)- AOP机制及注解的解析
AOP(Aspect Orient Programming):面向切面编程;用途:用于系统中的横切关注点,比如日志管理,事务管理;实现:利用代理模式,通过代理对象对被代理的对象增加功能。所以,关键在于AOP框架自动创建AOP代理对象,代理模式分为静态代理和动态代理;框架: AspectJ使用静态代理,编译时增强,在编译期生成代理对象;SpringAOP使用动态代理,运行时增强,在运行时,动态生成代理对象;原创 2024-05-11 23:04:09 · 971 阅读 · 0 评论 -
源码解读系列-spring源码(九)
解决循环引用逻辑:使用构造函数创建一个 “不完整” 的 bean 实例(之所以说不完整,是因为此时该 bean 实例还未初始化),并且提前曝光该 bean 实例的 ObjectFactory(提前曝光就是将 ObjectFactory 放到 singletonFactories 缓存),通过 ObjectFactory 我们可以拿到该 bean 实例的引用,如果出现循环引用,我们可以通过缓存中的 ObjectFactory 来拿到 bean 实例,从而避免出现循环引用导致的死循环。原创 2024-05-09 19:33:17 · 1034 阅读 · 0 评论 -
源码解读系列-spring源码(一)
Bean组件定义在Spring的包下,解决了以下几个问题:Bean的定义Bean的创建Bean的解析Spring Bean的创建是典型的工厂模式,它的顶级接口是BeanFactory。BeanFactory有三个子类:ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBeanFactory。目的是为了区分Spring内部对象处理和转化的数据限制。原创 2024-05-08 10:48:52 · 822 阅读 · 0 评论 -
源码解读系列-spring源码(七)
initMessageSource()方法用来设置国际化资源相关的调用,将实现了MessageSource接口的bean存放在ApplicationContext的成员变量中,先看是否有此配置,如果有就实例化,否则就创建一个DelegatingMessageSource实例的bean初始化MessageSource组件(做国际化功能;消息绑定,消息解析);获取BeanFactory判断容器中是否有id为messageSource的,类型是MessageSource的组件;原创 2024-05-09 16:13:07 · 701 阅读 · 0 评论 -
源码解读系列-spring源码(五)
配置 beanFactory 的标准上下文特征,例如上下文的 ClassLoader、后置处理器等。这个方法会注册3个默认环境 bean:environment、systemProperties 和 systemEnvironment,注册 2 个 bean 后置处理器:ApplicationContextAwareProcessor 和 ApplicationListenerDetector。原创 2024-05-09 15:29:07 · 937 阅读 · 0 评论 -
源码解读系列-spring源码(三)
为刷新准备新的上下文环境,设置其启动日期和活动标志以及执行一些属性的初始化。主要是一些准备工作(不是很重要的方法)作用:用于获得一个新的 BeanFactory流程:该方法会解析所有 Spring 配置文件(通常我们会放在 resources 目录下),将所有 Spring 配置文件中的 bean 定义封装成 BeanDefinition,加载到 BeanFactory 中(只注册,不会进行Bean的实例化)。原创 2024-05-08 18:56:15 · 1034 阅读 · 0 评论 -
源码解读系列-spring源码(十)
将之前解析的 BeanDefinition 进一步处理,将有父 BeanDefinition 的进行合并,获得 MergedBeanDefinition尝试从缓存获取 bean 实例处理特殊的 bean —— FactoryBean 的创建创建 bean 实例循环引用的处理bean 实例属性填充bean 实例的初始化BeanPostProcessor 的各种扩展应用。原创 2024-05-11 22:29:59 · 797 阅读 · 0 评论 -
源码解读系列-spring源码(八)
finishBeanFactoryInitialization 是整个 Spring IoC 核心中的核心。该方法会实例化所有剩余的非懒加载单例 bean。除了一些内部的 bean、实现了 BeanFactoryPostProcessor 接口的 bean、实现了 BeanPostProcessor 接口的 bean,其他的非懒加载单例 bean 都会在这个方法中被实例化,并且 BeanPostProcessor 的触发也是在这个方法中。原创 2024-05-09 19:33:40 · 798 阅读 · 0 评论 -
源码解读系列-spring源码(六)
1.整个 registerBeanPostProcessors 方法围绕 BeanPostProcessor 接口展开, 将 BeanPostProcessor 实现类注册到 BeanFactory 的 beanPostProcessors 缓存中(注意:只注册,不调用,还未到调用时机)2.BeanPostProcessor 实现类具体的 “出场时机” 在创建 bean 实例时,执行初始化方法前后。原创 2024-05-09 15:34:28 · 616 阅读 · 0 评论 -
源码解读系列-spring源码(四)
到这里已经初始化了 Bean 容器,<bean />配置也相应的转换为了一个个 BeanDefinition,然后注册了各个 BeanDefinition 到注册中心,并且发送了注册事件首先,将 xml 中的 bean 配置信息进行了解析,并构建了 AbstractBeanDefinition(GenericBeanDefinition) 对象来存放所有解析出来的属性。原创 2024-05-08 18:56:33 · 1019 阅读 · 0 评论 -
源码解读系列-spring源码(二)
Gradle是一个项目自动化构建工具。是Apache的一个基于Ant 和Maven的软件,用于项目的依赖管理。原创 2024-05-08 10:57:59 · 499 阅读 · 0 评论 -
源码解读系列-spring源码(十一)- 循环依赖
循环依赖:一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了构成一个环形调用(闭环)。例:第一种情况:两个对象之间的直接依赖:第二种情况:多个对象之间的间接依赖注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。原创 2024-05-11 22:50:18 · 946 阅读 · 1 评论
分享