源码

读spring mvc 源码

試著忘記壹切 提交于 2020-01-09 10:49:16
先看看关键servlet:DispatcherServlet的继承结构图 我们先从GenericServlet这个类看起。 1.这个类实现了servlet接口 2.看关键代码 public void init(ServletConfig config) throws ServletException { this.config = config; this.init(); } public void init() throws ServletException { }  这里init(ServletConfig config)是实现servlet的方法,init()是新建的方法。 而由于实现的方法里面,调用了init()这个方法,所以后续继承了GenericServlet 这个类的类,只要重写init()方法,即可对servlet的初始化部分进行修改。 我们再来看HttpServletBean这个类。 1.看关键代码 public final void init() throws ServletException { if (this.logger.isDebugEnabled()) { this.logger.debug("Initializing servlet '" + this.getServletName() + "'"); } try { PropertyValues

下载外部jar包后,链接源码和javadoc.jar

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-09 09:20:40
今天下载了一个Apache Common的一个jar包,对于引入源码和JavaDoc有了新的认识,在这里记录一下。 Binaries是指二进制文件,包含使用的jar包。Source是指源码。 xxx.tag.gz是在Linux系统下使用的压缩包,xxx.zip是Windows系统使用的。 下载了两个zip包后, commons-collections4-4.1-bin.zip解压下的文件夹 其中,commons-collections4-4.1.jar是可以使用的jar包。commons-collections4-4.1-javadoc.jar是可以在Eclipse中链接上的Javadoc。 Source attachment可以链接上xxx-src.zip,这是源码。链接上之后,点击调用的方法,可以直接看到方法的源代码,将鼠标放在方法上,可以看到方法的详细说明。 Javadoc location可以连接上-javadoc.jar。链接上之后,将鼠标放在方法上,可以看到方法的详细说明,但是点击后不能看到源码。 有点奇怪的是,既然链接源码后可以看到详细说明,那么还需要-javadoc.jar有什么用呢? 来源: https://www.cnblogs.com/huangwenjie/p/6641509.html

Nginx源码分析-启动初始化过程(一)

筅森魡賤 提交于 2020-01-09 04:11:09
Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个Nginx的入口,除了完成启动初始化任务以外,也必定是所有功能模块的入口之处。Nginx的初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)展开。下面具体看一下main函数为Nginx的启动过程做了哪些初始化方面的事情。 main函数做的第一件事情就是对参数选项进行处理,和普通的Linux程序如出一辙,如下: if (ngx_get_options(argc, argv) != NGX_OK) { return 1; } if (ngx_get_options(argc, argv) != NGX_OK) { return 1; } Nginx用此函数对参数选项进行解析,从而采取相应的动作,比如:显示版本、测试配置等功能。其实此函数实现的很简陋,远没有Linux提供的getopt()那么强悍,但却可以达到跨平台的目的。 ngx_time_init(); (NGX_PCRE) ngx_regex_init(); if ngx_pid = ngx_getpid(); log = ngx_log_init(ngx_prefix); if (log == NULL) { return 1; } ngx_time_init(); #if (NGX_PCRE) ngx

SpringMVC源码解析-DispatcherServlet启动流程和初始化

[亡魂溺海] 提交于 2020-01-09 01:29:19
在使用springmvc框架,会在web.xml文件配置一个DispatcherServlet,这正是web容器开始初始化,同时会在建立自己的上下文来持有SpringMVC的bean对象。 先从DispatcherServlet入手,从名字来看,它是一个Servlet。它的定义如下: public class DispatcherServlet extends FrameworkServlet { 它是继承FrameworkServlet,来看一下整个的继承关系。 从继承关系来看,DispatcherServlet继承FrameworkServlet和HttpServletBean而继承HttpServlet,通过使用Servlet API 来对HTTP请求进行响应,成为SpringMVC的前端处理器。 先看一个时序图 注:作为Servlet,DispatcherServlet的启动和Servlet的启动相关联的。在Servlet初始化过程中,Servlet的init方法会被调用,以进行初始化,然而DispatcherServlet的基类,所以从HttpServletBean中的初始化过程开始。 DispatcherServlet的工作分为2部分,一部分是初始化(也就是图的上半部分),有initServletBean()启动,通过initWebApplicationContext(

MyBatis源码的学习(21)---mybatis中当参数只有一个且是自定义对象类型时提示reflection.ReflectionException: There is no getter

陌路散爱 提交于 2020-01-09 01:03:04
Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'user' in 'class learn.User' ### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'user' in 'class learn.User' 主要原因是,复制代码的时候,入参那里将@Param注解去掉后,结果仍然使用 #{user.userCode}的方式获取值。 下面是正确的示例代码: package learn; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.session.RowBounds; import java.util.List; public interface UserMapper { public User selectUser(String id); public User

Spring源码学习(六)AbstractApplicationContext.refresh()

二次信任 提交于 2020-01-09 00:48:00
加油加油 🦆 大致过程 1 @Override 2 public void refresh() throws BeansException, IllegalStateException { 3 synchronized (this.startupShutdownMonitor) { 4 // Prepare this context for refreshing. 5 // 准备刷新的上下文环境 6 prepareRefresh(); 7 8 // Tell the subclass to refresh the internal bean factory. 9 //并读取XML,解析注册beanDefination,初始化beanFactory 10 // 11 ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); 12 13 // Prepare the bean factory for use in this context. 14 //对beanFactory进行功能填充 15 prepareBeanFactory(beanFactory); 16 17 try { 18 // Allows post-processing of the bean factory in context

spring源码——aop源码解析

南笙酒味 提交于 2020-01-08 18:56:48
spring源码——aop源码解析 aop的实现原理: aop的实现本质上就是通过在初始化bean对象的的时候,通过后置处理器对其进行一个动态代理,返回一个代理过后的wrappedBean。 具体过程:判断循环所有的BeanPostProcessor,然后我们aop什么时候被加进来的后置处理器? @EnableAspectJAutoProxy中的@Import(AspectJAutoProxyRegistrar.class)AspectJAutoProxyRegistrar这个类实现了ImportBeanDefinitionRegistrar,这个类中加入了一个bean后置处理器AnnotationAwareAspectJAutoProxyCreator,这个后置处理器对我们的实体类进行一个代理一个aop的增强 来源: CSDN 作者: 零2一 链接: https://blog.csdn.net/qq_23830637/article/details/103470247

Spark-Submit提交流程源码分析(Yarn-Cluster源码分析, Yarn-Cluster 和 Yarn-Client 的区别)

喜欢而已 提交于 2020-01-08 14:18:04
目录 概念简介 Hadoop Yarn组件介绍: ResourceManager(RM) NodeManager(NM) ApplicationMaster(AM) Container Yarn-Cluster模式 Spark On Yarn 一、 SparkSubmit 分析 二、转到 Client 三、ApplicationMaster 四、 CoarseGrainedExecutorBackend 分析 五、Yarn-client与Yarn-cluster的区别 概念简介 Hadoop Yarn组件介绍: 我们都知道yarn重构根本的思想,是将原有的JobTracker的两个主要功能资源管理器 和 任务调度监控 分离成单独的组件。新的架构使用全局管理所有应用程序的计算资源分配。 主要包含三个组件ResourceManager 、NodeManager和ApplicationMaster以及一个核心概念Container。(别人的) ResourceManager(RM)   就是所谓的资源管理器,每个集群一个,实现全局的资源管理和任务调度。它可以处理客户端提交计算作业的请求,启动并监听ApplicationMaster,监控NodeManager,进行资源分配与调度。每一个应用程序需要不同类型的资源,因此就需要不同的容器。这里的资源包括内存、CPU、磁盘、网络等。(比如

Apache Thrift系列详解(二) - 网络服务模型

坚强是说给别人听的谎言 提交于 2020-01-08 12:24:39
前言 Thrift 提供的网络服务模型:单线程、多线程、事件驱动,从另一个角度划分为:阻塞服务模型、非阻塞服务模型。 阻塞服务模型: TSimpleServer 、 TThreadPoolServer 。 非阻塞服务模型: TNonblockingServer 、 THsHaServer 和 TThreadedSelectorServer 。 TServer 类的层次关系: 正文 TServer TServer 定义了静态内部类 Args , Args 继承自抽象类 AbstractServerArgs 。 AbstractServerArgs 采用了建造者模式,向 TServer 提供各种工厂: 工厂属性 工厂类型 作用 ProcessorFactory TProcessorFactory 处理层工厂类,用于具体的TProcessor对象的创建 InputTransportFactory TTransportFactory 传输层输入工厂类,用于具体的TTransport对象的创建 OutputTransportFactory TTransportFactory 传输层输出工厂类,用于具体的TTransport对象的创建 InputProtocolFactory TProtocolFactory 协议层输入工厂类,用于具体的TProtocol对象的创建