目录
1.Spring特点
1.Spring特点
1.Spring是轻量级开源的JavaEE框架。
轻量级:由20多个模块构成,每个jar包都很小,小于1M,核心包也就3M左右。对代码无污染。什么是污染,比如用maven时,要按着maven的目录结构,pom文件的规定来写代码。
Spring功能强大,可以整合其他框架。比如SpringMVC,SpringBoot,和微服务的SpringBoot。整合其他框架后,使其他框架更易用。
核心是IOC和AOP。
IOC降低业务对象之间的耦合度。使业务互调过程中,不再自己维护关系,即不用再自己创建使用的对象了。由Spring容器统一管理,自动注入,注入即赋值。
控制反转将原本由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理,所以控制反转就是将对象的控制权转移,从程序代码本身转到外部容器,通过容器实现对象的创建,属性的赋值,依赖的管理。
Spring的主要作用就是为代码解耦,降低代码之间的耦合度,让对象和对象之间的关系不是使用代码关联,而是通过配置说明。
形象理解解耦
有一块布,当作你的衣服,但只是一块布,没有任何加工,当你弄坏了某一处,需要修补,那你需要将整块布脱下来才能修补,如果将这块布加工,做成裤子,上衣,手套,帽子。如果哪块需要修补就单独脱哪块,不用牵一发而动全身了,这就是解耦。但是也不是解耦程度越高越好,若一个手套五个指头都单独做成手套,那也不利于操作。
DI和IOC的联系
IOC是种思想,而DI是种技术,通过DI实现IOC,可以认为DI=IOC。
Spring是一个框架,相当于一个半成品软件,是一个容器来管理对象,这个容器不装文本,数字,而是装对象。
Spring面向接口编程,什么是面向接口编程?类中的成员变量设计为接口,方法的参数设计为接口,方法的返回值设计为接口,调用的时候接口指向实现类。使用接口就是面向灵活,项目的可扩展性,可维护性都极高,接口不关心实现类的类型。只要实现了这个接口就说明能使用这个接口的功能。切换实现类即可切换整个功能,比如界面层,业务逻辑层,数据访问层,每一层都有接口卡住,比如数据访问层用的是MySQL的数据库,接口指向MySQL的实现类,如果需要更换Oracle的数据库,那么只需要在数据访问层切换掉MySQL的实现,更换成Oracle的实现就好了,上面整个项目都不用动。
AOP使系统服务得到最大复用。做好一处,然后处处调用。
Spring面向切面,什么是面向切面?公共的业务逻辑操作都称之为切面。跟具体的功能性的业务没有关系。
比如controller,service或DAO层取出数据时,都会System.out.println()来输出一下看结果,这个控制台输出结果的这个功能是用来检测的,跟代码功能无关,当项目上线之后就不能用这种方法来观察结果检测代码了,就需要用到日志,可以理解为日志就是输出语句,输出代码的情况,但不同的层都需要日志功能,所以可以把所有日志的处理集中起来做开发,谁需要日志功能,就把日志功能支回去。谁需要日志功能谁调用,所以日志功能达到可以开发一次,处处就可调用。这个公共的业务逻辑,公共的代码,公共的处理就是切面。 底层原理是动态代理。
理解什么是面向切面
2.Spring框架的体系结构
上下文就是与当前这件事有关联的其他数据。
比如上学读书,学校的老师,同学,餐厅,教室都是这件事的上下文。给上学读书提供支持。
Aspects是面向切面编程的核心功能包。
Instrumentation是JVM的代理。
Messaging是消息传送机制。
这四个其实是底层核心包的应用。
再往上是基于这些应用能实现的功能包含数据库的访问和Web的应用。