spring高级四十九讲_第1页
spring高级四十九讲_第2页
spring高级四十九讲_第3页
spring高级四十九讲_第4页
spring高级四十九讲_第5页
已阅读5页,还剩89页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Spring高级49讲对Spring

功能还不了解,还不会用呢,却要强读不要轻易装B,轻则耗费心神,重则挫败放弃解决:先会用,再研究没有目的,一上来就debug,看到哪分析到哪没有目的的debug,会让你迷失在源码当中,翻一百遍也是枉然解决:明确要研究的问题,带着问题看代码不分主次,分析一个问题时,引入另一个陌生问题 解决:抓住重点,逐个击破只讲源码功能,不做单元测试解决:眼过千遍,不如手过一遍读源码的错误姿势了解欲研究的组件(类)基本使用用单元测试研究组件的特性试着自己实现类似功能(选讲)最后再深入阅读该组件的源码(避免讲)我的课程怎么讲?你只需具备Spring

的基础知识想探究Spring

原理的好奇心收获培养正确的学习源码方法睥睨其它程序员的资本唯一认清Spring

的机会面向人群、能收获什么?第卅六讲MVC

处理流程第卅五讲Mapping与Adapter4第卅四讲Mapping与Adapter3第卅三讲Mapping与Adapter2第卅二讲Tomcat

异常处理第卅一讲@ExceptionHandler第卅讲异常处理第四讲Bean

后处理器第六讲Aware

接口第七讲初始化与销毁第八讲Scope第九讲AOP

之ajc

编译器第十讲AOP

之agent

类加载第十二讲jdk

动态代理第十三讲cglib

代理第十四讲避免反射调用第十五讲jdk

和cglib

的统一第十六讲切点匹配第十七讲@Aspect

与Advisor第十八讲静态通知第十九讲动态通知第一讲容器接口

第廿讲

Mapping与Adapter1第二讲容器实现

第廿一讲参数处理器第十一讲AOP

之proxy第三讲Bean

的生命周期 第廿二讲获取参数名第五讲BeanFactory

后处理器

第廿四讲

@InitBinder第廿五讲控制器执行流程第廿六讲@ModelAttribute第廿七讲返回值处理器第廿八讲MessageConverter第廿九讲ResponseBodyAdvice第卅七讲Boot

骨架创建第卅八讲Boot

War项目第卅九讲Boot

启动过程第卌讲Tomcat内嵌容器第卌一讲Boot自动配置第卌二讲条件装配底层第廿三讲对象绑定与类型转换第卌三讲FactoryBean第卌四讲@Indexed原理第卌五讲代理深入第卌六讲@Value底层第卌七讲@Autowired底层第卌八讲事件监听器第卌九讲事件发布器第卅六讲MVC

处理流程第卅五讲Mapping与Adapter4第卅第一十讲一@讲EAxcOePpt之ionpHroaxnydler第第卅十二二讲讲Tomjdcka动t

异态常代处理理第卅三第讲十三Ma讲ppcignlgib与代Ad理apter2第卅第四十讲四讲Ma避pp免ing反与射Ad调ap用ter3第廿第六七讲@初M始o化de与lAt销tri毁bute第廿七第讲八返讲回Sc值op处e

理器第九讲AOP

之ajc

编译器

第第廿卅讲第七一M讲a讲pBpo容inog器t与骨接A架d口a创pt建er1第十讲第A卅O讲P之异a常ge处nt理类加载第第卅第廿八二一讲讲B参容oo数器t

W处实a理现r项器目第第卅廿讲九二讲B讲eaBno获o的取t

启生参动命数过周名程期第五第第讲卌廿一B四e讲a讲nFBa@ocotIotn自riytB动后in配d处e置r理器第第廿卌第五二六讲讲控条A制w件a器r装e执接配行口底流层程第廿第第三卌卌讲讲讲三对T讲B象oema绑Fcnaac定t后t内o与处r嵌y类B理容e型a器器n转换第卌四讲@Indexed原理讲代理深入第十第五卌讲五jdk

和cglib

的统一第第卌十六六讲讲@切Va点lu匹e底配层第第十卌七七讲讲@@AAspuetoctw与ireAd底dv层isor第廿八讲MessageConverter第第卌十八八讲讲事静件态监通听知器第廿九讲ResponseBodyAdvice第第卌十九九讲讲事动件态发通布知器第第廿第卅第五第第十第卅第十第廿第廿卅卌第廿第三九三五四三讲卅七第卌一第第廿卌第卌卅第五讲十八十讲四六二七卌廿五第第卌卌廿讲六七九讲十四十四七二卌讲一八B六讲二讲一第A讲六三二卅一八九讲M四一eR讲OA三讲八九六讲五MM讲B讲a@讲@T讲八jaMe讲OdBPn讲e象@T@初控opaas讲oAEkaeFMBPm@返条避Be讲BAp之pAMAamxn参jas绑@oF获制始异容事s和@odwi之cVpcIOnunasco静切动件免代noc的nokoaietSeCVag数c定ntgI取器化常器件Ptaodtt后pstdncocgtalr动a与g内自值装反态点态理tie骨启r处e生oegtetW之webl处j与yt执参与监发处接实iuB异xc处lrploCB与态i接A嵌动i处射配通匹深ye代ea动理架ob后命ert编noi理类ApBtd行数销听布理现口denr底常理dtH代n类的口项配容rd调底知配ae入Ad原理创过d流处r周y译ov器型aip流名毁aa器层底处deA器bex理加统目n置器np层用t理建程rv理期duyr器e转d程ti层理tvtsree载一lee器i1eor换cr234re讲哪些内容BeanFactoryClassPathXmlApplicationContextFileSystemXmlApplicationContextApplicationContextAnnotationConfigApplicationContextAnnotationConfigServletWebServerApplicationContextDefaultListableBeanfactoryBeanPostProcessorBeanPostProcessor讲哪些内容ApplicationContextBeanFactoryBean

定义Bean

定义Bean

定义BeanFactoryPostProcessorBeanBeanBeanBeanPostProcessorBeanPostProcessorBeanPostProcessor讲哪些内容BeanPostProcessor@Bean@Import@Configuration@Component@ComponentScanBeanFactoryPostProcessorConfigurationClassPostProcessor

MapperScannerConfigurer@Configuration

Mapper

接口@Bean@ImportBeanPostProcessorBeanPostProcessor讲哪些内容BeanFactoryPostProcessorBeanPostProcessorBeanPostProcessorBeanPostProcessor讲哪些内容BeanFactoryPostProcessorBeanPostProcessorAutowiredAnnotationCommonAnnotationAnnotationAwareAspectJAutoProxyCreatorBean

定义BeanFactory@@PoRsetCsonusrctreuct@Autowired@IBneitaianAl(iwiznianitrgMeBetahnod)BeanAAdsvpiescotrAdvisorAdvisorProxyProxyFactory讲哪些内容ProxyFactoryMethodInvocationProxyInvocationHandlerTargettarget.foo()讲哪些内容DispatcherServlet讲哪些内容RequestMappingHandlerMappingRouterFunctionMappingSimpleUrlHandlerMappingBeanNameUrlHandlerMappingDispatcherServlet@Bean("/c/c11")public

CCoonnttrroolllleerr

controller1()

{return

(request,

response)

->

{response.getWriter().print("this

is

c1");return

null;};}讲哪些内容RequestMappingHandlerMappingRouterFunctionMappingSimpleUrlHandlerMappingBeanNameUrlHandlerMapping/c1

ControllerDispatcherServlet讲哪些内容RequestMappingHandlerMappingRouterFunctionMappingSimpleUrlHandlerMappingBeanNameUrlHandlerMapping/c1

ControllerDispatcherServlet@Bean("/c/c22")public

CCoonnttrroolllleerr

controller2()

{return

(request,

response)

->

{response.getWriter().print("this

is

c2");return

null;};}讲哪些内容RequestMappingHandlerMappingRouterFunctionMappingSimpleUrlHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

Controller讲哪些内容RequestMappingHandlerMappingRouterFunctionMappingSimpleUrlHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

Controller@Controllerpublic

class

Controller1

{@GetMapping("/t1")@PostMapping("/t2")@ResponseBody@ResponseBodypublic

User

t1()

throws

ExceptiHonan{dlerMethod

log.debug("t1()");return

new

User("张三",18);}GET

/t1public

Usert2(@RequestParamH("annadmleerM")

eStthriondg

name)

{log.debug("t2({})",

name);return

new

User("李四",20);}}POST/t2讲哪些内容RequestMappingHandlerMappingRouterFunctionMappingSimpleUrlHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerHandlerMethodHandlerMethodGET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingRouterFunctionMappingSimpleUrlHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerHandlerMethodHandlerMethod@BeanpublicRRoouutteerrFFuunnccttioionn<ServerResponse>

r1(DispatcherServlet

servlet)

{return

route(GEGTE(T"//rr11"),

r

->

ok().body("this

is

r1"));}GET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerHandlerMethodHandlerMethodRouterFunctionMappingGET/Rro1uterFunctionGET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerHandlerMethodHandlerMethod@BeanpublicRRoouutteerrFFuunnccttioionn<ServerResponse>

r2(DispatcherServlet

servlet)

{return

route(GEGTE(T"//rr22"),

r

->

ok().body("this

is

r2"));}RouterFunctionMappingGET/Rro1uterFunctionGET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerHandlerMethodHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionGET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerHandlerMethodHandlerMethod@Bean("//iimmaaggeess//****")public

RReseosouurcreceHHtttptpRReqequueestsHtHaannddleler

rhandler2()

{ResourceHttpRequestHandler

handler=

new

ResourceHttpRequestHandler();handler.setLocations(List.of(new

ClassPathResource("images/")));return

handler;}RouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionGET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerHandlerMethodHandlerMethodSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionGET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerHandlerMethodHandlerMethodSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerrequest

GET

/c2RouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionGET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerHandlerMethodHandlerMethodSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionrequest

GET

/c2GET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingDispatcherServletBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerHandlerMethodHandlerMethodSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionrequest

GET

/c2GET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionrequest

GET

/c2HandlerInterceptorGET

/t1POST/t2BeanNameUrlHandlerMapping/c1

Controller/c2

Controller讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionrequest

GET

/c2BeanNameUrlHandlerMapping/c1

Controller/c2

ControllerGET

/t1POST/t2/c2

ControllerHandlerInterceptorpreHandle()讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionrequest

GET

/c2BeanNameUrlHandlerMapping/c1

Controller/c2

ControllerSimpleControllerHandlerAdapterModelAndViewGET

/t1POST/t2/c2

ControllerHandlerInterceptor讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionrequest

GET

/c2BeanNameUrlHandlerMapping/c1

Controller/c2

ControllerSimpleControllerHandlerAdapterModelAndViewGET

/t1POST/t2/c2

ControllerHandlerInterceptorpostHandle()讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionrequest

GET

/c2BeanNameUrlHandlerMapping/c1

Controller/c2

ControllerSimpleControllerHandlerAdapter<html><body>hello,

${name}</body></html>ModelAndViewGET

/t1POST/t2/c2

ControllerHandlerInterceptor讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionrequest

GET

/c2BeanNameUrlHandlerMapping/c1

Controller/c2

ControllerSimpleControllerHandlerAdapter<html><body>

hello,张三</body></html>ModelAndViewresponseGET

/t1POST/t2/c2

ControllerHandlerInterceptor讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionrequest

GET

/c2BeanNameUrlHandlerMapping/c1

Controller/c2

ControllerSimpleControllerHandlerAdapter<html><body>

hello,张三</body></html>ModelAndViewresponseGET

/t1POST/t2/c2

ControllerHandlerInterceptorafterCompletion()讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerGET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionBeanNameUrlHandlerMapping/c1

Controller/c2

Controllerrequest

POST

/t2GET

/t1POST/t2讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionBeanNameUrlHandlerMapping/c1

Controller/c2

Controllerrequest

POST

/t2GET

/t1HandlerMethodPOST/t2讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionBeanNameUrlHandlerMapping/c1

Controller/c2

ControllerGET

/t1request

POST

/t2HandlerInterceptorHandlerMethodPOST

/t2讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionBeanNameUrlHandlerMapping/c1

Controller/c2

Controllerrequest

POST

/t2GET

/t1POST/t2

HandlerMethodHandlerInterceptorHandlerMethodPOST/t2preHandle()@Controllerpublic

class

Controller1

{@PostMapping("/t2")@ResponseBodylog.debug("t2({})",name);return

new

User("李四",20);}}讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionBeanNameUrlHandlerMapping/c1

Controller/c2

Controllerrequest

POST

/t2GET

/t1POST/t2

HandlerMethodHandlerInterceptorHandlerMethodPOST/t2RequestMappingHandlerAdapter数据绑定工厂参数名解析器参数解析器类型转换器返回值处理器消息转换器public

User

t2(@RequestParam("name")Stringname模){型工厂response讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionBeanNameUrlHandlerMapping/c1

Controller/c2

Controllerrequest

POST

/t2GET

/t1POST/t2

HandlerMethodHandlerInterceptorHandlerMethodPOST/t2RequestMappingHandlerAdapter返回值处理器消息转换器response讲哪些内容RequestMappingHandlerMappingSimpleUrlHandlerMapping/images/**

ResourceHttpRequestHandlerDispatcherServletHandlerMethodRouterFunctionMappingGET

/Rro1uterFunction

GET

R/ro2uterFunctionBeanNameUrlHandlerMapping/c1

Controller/c2

Controllerrequest

POST

/t2GET

/t1HandlerInterceptorHandlerMethodPOST/t2POST/t2

HandlerMethodRequestMappingHandlerAdapter返回值处理器消息转换器afterCompletion()ᵘBeanFactory能做哪些事ᵨApplicationContext有哪些扩展功能

ᵤ事件解耦1.容器接口ᵘBeanFactory实现的特点ᵨApplicationContext的常见实现和用法

ᵤ内嵌容器、注册DispatcherServlet2.容器实现ᵘSpring

bean生命周期各个阶段ᵨ模板设计模式3.Bean的生命周期ᵘBean后处理器的作用:为Bean生命周期各个阶段提供扩展ᵨ常见的Bean后处理器4.Bean后处理器ᵘBeanFactory后处理器的作用:为BeanFactory提供扩展ᵨ常见的BeanFactory后处理器5.BeanFactory后处理器ᵘAware接口提供了一种【内置】的注入手段,可以注入BeanFactory,

ApplicationContextᵨInitializingBean接口提供了一种【内置】的初始化手段ᵤ内置的注入和初始化不受扩展功能的影响,总会被执行,因此Spring框架内部的类常用它们ᵐ实战:@Autowired失效分析6.Aware接口ᵘSpring提供了多种初始化和销毁手段ᵨ它们的执行顺序7.初始化与销毁ᵘScope类型有哪些ᵨ在singleton中使用其它几种scope的注意事项ᵤscope的销毁ᵐ实战:scope失效分析解决方法虽然不同,但理念上殊途同归:都是推迟其它scope

bean的获取8.ScopeᵘAOP的另一种实现及原理9.AOP实现之ajc编译器ᵘAOP的另一种实现及原理10.AOP实现之agent类加载ᵘjdk动态代理实现及要点ᵨcglib代理实现及要点invoke与invokeSuper区别11.AOP实现之proxyᵘ代理类的内部原理方法重写可以增强逻辑通过接口回调将【增强逻辑】置于代理类之外配合接口方法反射(也是多态),就可以再联动调用目标方法12.jdk动态代理进阶ᵘ代理类的内部原理13.cglib代理进阶ᵘMethodProxy如何避免反射调用方法ᵨ与jdk对比14.cglib避免反射调用ᵘSpring的代理选择规则ᵨ底层的切点实现

ᵤ底层的通知实现

ᵐ底层的切面实现15.jdk和cglib的统一ᵘ常见切点匹配实现16.切点匹配ᵘ高级的@Aspect切面ᵨ低级的Advisor切面ᵤ高级转换为低级切面的时机及代理生成时机

ᵐ吐槽切面的顺序控制17.从@Aspect到Advisorᵘ不同通知统一转换为环绕通知,适配器模式体现ᵨ无参数绑定通知链执行过程,责任链模式体现ᵤ模拟实现MethodInvocation18.静态通知调用ᵘ有参数绑定通知链执行过程19.动态通知调用ᵘDispatcherServlet初始化时机ᵨDispatcherServlet初始化都做了什么

ᵤRequestMappingHandlerMapping基本用途

ᵐRequestMappingHandlerAdapter基本用途

ᵌ自定义参数和返回值处理器20.RequestMappingHandlerMapping与RequestMappingHandlerAdapterᵘ常见参数解析器作用ᵨ组合模式在Spring中的体现

ᵤ${}#{}小技巧

ᵐWeb环境下测试技巧21.参数解析器ᵘ编译生成参数表ᵨ编译生成调试信息22.获取参数名ᵘ两套底层转换接口,一套高层转换接口ᵨ类型转换和数据绑定示例

ᵤ类型转换扩展与绑定器工厂ᵐ@DateTimeFormat注解谁来解析ᵌSpring提供的泛型操作技巧23.对象绑定与类型转换ᵘ绑定器工厂的扩展点:@InitBinder及来源ᵨ编程技巧:缓存加速24.ControllerAdvice之@InitBinderᵘ控制器方法执行流程25.控制器方法执行流程ᵘ模型数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论