collective_lz
技术人员的目标不是拥有多么厉害的技术,而是用技术去促成一个产品的成功
展开
-
SpringBoot调用流程源码(十九)tomcat的启动(九)请求进来的流程
当一个请求访问springboot的接口的时候,会被Nio的selector轮询到一、入口轮询的方法是在NioEndPoint端点的内部类SocketProcessor类中的doRun()方法,然后进入如下方法中state = getHandler().process(socketWrapper, event);然后进入Http11Processor类的process方法中,因为请求进来...原创 2018-11-06 23:10:25 · 1706 阅读 · 0 评论 -
SpringBoot调用流程源码(十八)tomcat的启动(八)监听启动,读写
tomcat中所有的组件都启动了之后,后面就需要绑定监听端口了,监听端口的地方是在ServletWebServerApplicationContext的finishRefresh()方法中,最后会进入了NioEndPoint的bind()方法,在这个方法中进行了端口的绑定和监听 @Override public void bind() throws Exception { ...原创 2018-09-06 22:40:13 · 2710 阅读 · 0 评论 -
SpringBoot调用流程源码(十七)tomcat的启动(七)startInternal()方法
说完init()方法后,我们说下startInternal()方法,这个方法,首先进入了StandardServer的startInternal()方法。然后进入了StandardService的startInternal()方法,然后进入了StandardEngine的startInternal()方法,然后进入了StandardHost的start()方法,然后进入了StandardConte...原创 2018-09-06 22:53:29 · 1044 阅读 · 0 评论 -
SpringBoot调用流程源码(十六)tomcat的启动(六)Connector的initInternal方法
在上篇文章中说到,StandardServcie的initInternal()方法,进入了Connector的initInternal方法,其方法如下:一、StandardService.initInternal @Override protected void initInternal() throws LifecycleException { supe...原创 2018-09-06 22:53:09 · 1689 阅读 · 0 评论 -
SpringBoot调用流程源码(十五)tomcat的启动(五)LifeCycleBase.init()
LifeCycelBase作为众多组件的父类,其init()方法,第一次调用用是在StandardServer的start()方法中,其方法内容如下: setStateInternal(LifecycleState.INITIALIZING, null, false); initInternal(); setStateIn...原创 2018-09-06 22:53:47 · 729 阅读 · 0 评论 -
SpringBoot调用流程源码(十四)中tomcat的启动(四)TomcatWebServer的initialize()
TomcatWebServer的initialize方法是在其构造方法中被调用,方法如下: addInstanceIdToEngineName(); Context context = findContext(); context.addLifecycleListener((event) -> { if (context.equals(event.ge...原创 2018-09-06 22:53:38 · 2306 阅读 · 0 评论 -
SpringBoot调用路程源码(十三)tomcat的启动(三)
上面一篇博文我们说到了tomcat的客户化配置,在客户化配置后就进入了TomcatServletWebServerFactory的getWebServer方法, @Override public WebServer getWebServer(ServletContextInitializer... initializers) { Tomcat tomcat = new Tomcat()...原创 2018-09-06 22:49:28 · 1197 阅读 · 0 评论 -
SpringBoot调用流程源码(十二)tomcat的启动(二)客户化配置
在AbstractApplicationContext的onRefresh方法中,进入了ServletWebServerApplicationContext类的onRefresh()方法,如下: @Override protected void onRefresh() { super.onRefresh(); try { createWebServer(); } ca...原创 2018-09-06 22:52:51 · 716 阅读 · 0 评论 -
SpringBoot调用流程源码(十一)tomcat的启动入口
在springboot中,是融合了tomcat的启动与加载的,那么关于tomcat的启动与加载的入口就是研究的第一步,在EmbeddedWebApplicationContext类中,重写了AbstractApplicationContext的finishRefresh()方法,如下: protected void finishRefresh() { super.finishRefresh()...原创 2018-05-06 19:13:05 · 2504 阅读 · 0 评论 -
SpringBoot调用流程源码(十)@RestControllerAdvice与@ExceptionHandler注解源码详解
一、处理流程@RestControllerAdvice与@ExceptionHandler注解是sprngmvc中与异常捕获与处理相关的注解,它的入口也是DispatcherServlet中的doDispatcher()方法中,如下:this.processDispatchResult(processedRequest, response, mappedHandler, mv, (Exceptio...原创 2018-05-17 10:34:16 · 8846 阅读 · 2 评论 -
SpringBoot调用流程源码(九)AntPatternComparator的路由优先级
spring源码(一)AntPatternComparator的路由优先级spring的路由在spring中,我们经常在requestMapping中配置各种路由如:/a/b/c/d/a/b/c/{d}/a/b/*/d/a/b/**等等,而有时候会遇到匹配到两个路由的情况,这个时候就是由Spring的AntPatternComparator做了优先级处理。优先级的规则而优先级是有...原创 2018-10-18 20:15:59 · 1246 阅读 · 2 评论 -
SpringBoot调用流程源码(八)conversionService类型转换类源码详解
conversionService是spring中的从前端到后端的类型转换器,一般我们会配置或者自己手动配置HandlerMapping和HandlerAdapter。如果需要从前端页面的字符串自动映射成Date类型等类型转换,我们就要自己手动配置conversionService。原创 2018-01-15 21:10:24 · 1105 阅读 · 0 评论 -
SpringBoot调用流程源码(六)之请求路径匹配路由
在spring中,当一个请求过来的时候会做路径匹配,下面我们就从源码层面分析一下路径匹配。示例:@RequestMapping(value = "/user/{aid}/online/**", method = RequestMethod.GET)我们一起看看这个方法是如何寻找的,和一些相应的工具类1、入口我的项目使用的是自动配置的RequestMappingHandlerM...原创 2018-07-26 20:49:36 · 4035 阅读 · 0 评论 -
SpringBoot调用流程源码(五)访问静态资源源码解析
Springboot中访问静态资源也是通过DispatcherServlet。与访问方法请求一样也是走的这个方法:mv = ha.handle(processedRequest, response, mappedHandler.getHandler());不过使用的handlerAdapter类是HttpRequestHandlerAdapter.在上面mapperHandler.getHandl...原创 2018-07-09 23:19:08 · 1236 阅读 · 0 评论 -
SpringBoot调用流程源码(四)Actuator内存溢出
Springboot中,我们可以使用监控工具Actuator,查看和变更spring的状态,但是Actuator是有可能引起内存溢出的问题的,具体原因,分析如下:一、Filter在Actuator中,有一个过滤器,即MetricsWebFilter,请求监控过滤器,其filter方法如下: private Publisher<Void> filter(ServerWebE...原创 2018-08-14 21:30:46 · 2970 阅读 · 1 评论 -
SpringBoot调用流程源码(三)Actuator
一、引入Actuator当我们在项目中引入spring-boot-starter-actuator的时候,我们可以通过如下方式调用,查看服务的信息:localhost:8006/actuator/info默认actuator只开启了info和health,如果想要使用其他功能,需要在配置中类似如下方式添加: management.endpoints.web.exposure.i...原创 2018-08-14 22:52:07 · 2222 阅读 · 1 评论 -
SpingBoot调用流程源码(二)入参出参映射类ArgumentResolver和ReturnValueHandler
文章目录一、ArgumentResolver源码分析二、注册时候的注意事项三、RequestMappingHandlerAdapter加载resolver和handler在我们写代码的时候有时候需要做入参,出参映射,如果你们公司的网关已经实现了这个功能,那再好不过,如果没有,需要你在自己的某个服务中自己通过代码实现,这个时候Spring中的ArgumentResolver和ReturnValue...原创 2019-01-05 14:35:21 · 597 阅读 · 0 评论 -
SpringBoot调用流程源码(一)SpringFramework中的BeanUtils的缓存机制
平时我们做对象属性拷贝,Spring的BeanUtils是经常被使用到的,因为对象复制需要,也是我们经常使用的类,其用法如下 Product product = new Product(); product.setBuyLimit(3l); product.setPrice(23.4); product.setDateAvailable(456l......原创 2018-12-04 00:04:51 · 1134 阅读 · 0 评论