小小鹦鹉5 发表于 2017-11-1 15:18

学习框架spring阶段自己整理的笔记和相关代码,纯手写!

本帖最后由 小小鹦鹉5 于 2017-11-1 15:24 编辑

详细的分析代码都在压缩文件中,下载完使用notepad打开就行!码字不容易,谢谢谢各位!spring特性:   1,方便解耦,简化开发通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。   
2,AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。   
3,声明式事务的支持在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。   
4,方便程序的测试可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。   
5,方便集成各种优秀框架 Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。   
6,降低Java EE API的使用难度 Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。   
7,Java 源码是经典学习范例 Spring的源码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。            
如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。            
对Spring aop的理解            
AOP,也就是面向切面编程,我是这么理解的:学java的应该都知道面向对象编程(oop),而OOP是从静态解读考虑程序结构,但AOP是从动态角度考虑程序运行过程。            
也可以说AOP是OOP的补充和完善。OOP引入了封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共的一个集合。当我们需要为分散的对象引入公共行为的时候,
则OOP显得无能为力了。也就是说,OOP允许你定义从上到下的关系,但并不适合从左到右的关系,例如日志功能。日志代码往往水平的散步在所有对象层次中,            
而与它所散步到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切代码,            
在oop设计中,他导致了大量代码的重复,而不利于各个模块的重用。        
而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将哪些影响了多个类的公共行为封装到一个可重用模块,简单的来说就是将那些与业务无关,            
却为业务模块所共同调用的逻辑或责任封装起来。便于减少系统的重复代码,降低模块间的耦合度等。      
aop底层有两种代{过}{滤}理(jdk代{过}{滤}理,CGLIB代{过}{滤}理):            
java动态代{过}{滤}理是利用反射机制生成一个实现代{过}{滤}理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。            
cglib代{过}{滤}理,是针对类来实现代{过}{滤}理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代{过}{滤}理。(例如service的事务处理)                  
对Spring IOC的理解            
IoC(控制反转),将类的创建和依赖关系写在配置文件里,由配置文件注入,实现了松耦合                  
IOC底层实现原理:JAVA反射            
springmvc的运行流程,实现原理?            
执行流程:                  
1).若一个请求匹配 DispatcherServlet 的请求映射路径(在 web.xml 中指定), WEB容器将该请求转交给 DispatcherServlet 处理                  
2).DispatcherServlet 接收到请求后, 将根据请求信息(包括 URL、HTTP 方法、请求头、请求参数、Cookie 等)及 HandlerMapping 的配置找到处理请求的处理器(Handler). 可将 HandlerMapping 看成路由控制器,将 Handler 看成目标主机。                  
3).当 DispatcherServlet 根据HandlerMapping 得到对应当前请求的 Handler 后, 通过 HandlerAdapter 对 Handler 进行封装,再以统一的适配器接口调用 Handler。                  
4).处理器完成业务逻辑的处理后将返回一个 ModelAndView 给 DispatcherServlet, ModelAndView 包含了视图逻辑名和模型数据信息                     
5).DispatcherServlet 借助 ViewResoler 完成逻辑视图名到真实视图对象的解析                  
6).得 到 真 实 视 图 对 象 View 后 ,DispatcherServlet 使用这个 View 对ModelAndView 中的模型数据进行视图渲染            
实现原理:                     
基于servlet实现,同样流行的mvc框架还有struts2,两者区别是:                           
1,SpringMVC的入口是servlet,而Struts2是filter(filter执行顺序 > serlvet)                           
2,spring会稍微比struts快。spring mvc是基于方法的设计 ,而sturts是基于类 ,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,                           
粒度更细,但要小心把握像在servlet控制数据一样。spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3mvc中,一个方法对应一个request上下文,                            所以说从架构本身上SpringMVC就容易实现restful,且SpringMVC执行和开发效率都应该是高于Struts2的。

小小鹦鹉5 发表于 2017-11-5 23:44

zl20110000 发表于 2017-11-5 20:59
楼主能说一下,学习spring源码应该从哪里入手

spring框架核心主要学ioc和aop两个技术,ioc控制反转,就是通框架帮你创建对象,利用的底层是反射没所以研究底层研究反射这方面就行;aop面向切面编程,不是实现业务主线上的功能,是横向切入实现一些事物可控制,打印日志,异常信息,来增强主线功能,用到的是动态代{过}{滤}理,动态代{过}{滤}理研究底层就研究jdk提供的基于接口的和一个cglib的基于子类的,总结:研究spring就去研究ioc和aop中的反射和动态代{过}{滤}理就行了,这是我个人观点,仅供参考!

crq龙君 发表于 2019-7-23 21:16

已下载感谢楼主分享, 顺嘴问下下楼主有写axjx 和json 的吗? 还有spring MVC的笔记么 现在我这个阶段急需 学习

dj1149 发表于 2017-11-1 15:30

Thanks 近期正准备学

纳兰无羁 发表于 2017-11-1 15:30

看了一下很不错学习了感谢楼主分享

arryboom 发表于 2017-11-1 16:45

感谢分享,最近也在看Spring MVC

183595412 发表于 2017-11-1 17:35

谢谢啊。技术控啊。看不懂啊。

神奇林 发表于 2017-11-2 09:40


看了一下很不错学习了感谢楼主分享

一不小心爱上你 发表于 2017-11-3 10:00

感谢楼主分享

zl20110000 发表于 2017-11-5 20:59

楼主能说一下,学习spring源码应该从哪里入手

fangaiyisheng 发表于 2017-11-6 06:43

感谢楼主分享
页: [1] 2 3
查看完整版本: 学习框架spring阶段自己整理的笔记和相关代码,纯手写!