Java Web系列文章汇总贴: Java Web知识总结汇总
为什么要有Spring(IoC)
Web发展的几个阶段
- (1)初级阶段:使用Model1(JSP+JavaBean)/Model2(Jsp+Servlet+JavaBean)/三层模型(表示层(JSP/Servlet)+业务逻辑层+持久化层)进行开发;
- (2)中级阶段:使用EJB进行分布式应用开发,忍受重量级框架带来的种种麻烦;
- (3)高级阶段:使用Spring春天带给我们的美好,但是还要忍受很多繁琐的配置;
- (4)骨灰级阶段:使用Spring Boot,畅享“预定大于配置”带给我们的种种乐趣!
Web发展初级阶段存在的问题
- 1、面向接口编程的实例化对象,每一个方法中都需要进行实例化我们需要用到的接口的实现类,这就会存在大量的实例化对象,并且他们的生命周期可能就是从方法的调用开始到方法的调用结束为止,加大了GC回收的压力!
- 2、使用单例模式的一次改进,使用单例模式的方式来解决这个问题,以此来避免大量重复的创建对象,但是我们还要考虑到众多的这种对象的创建都需要改成单例模式的话,是一个耗时耗力的操作。对于这个系统来说,如果都把这种面向接口的对象实现类转换为单例模式的方式的话,大概也要写十几个或者上百个这种单例模式代码,而对于一个单例模式的写法来说,往往是模板式的代码。
- 3、使用工厂模式创建对象,也会存在大量的工厂、模板式代码,需要自己管理复杂的实例依赖关系,而且代码的耦合性较高
可以看出,这种方式有两个问题:
(1)业务代码与单例/工厂模式的模板代码放在一个类里,耦合性较高;
(2)大量重复的单例/工厂模式的模板代码,需要自己管理对象间复杂的依赖关系
更多:
通过Web开发演进过程了解一下为什么要有Spring
Spring概述
是什么?
一个开源的轻量级开发框架,是为了解决企业应用程序的复杂性而创建的。
为什么?
EJB时代,企业级应用开发困难。Spring设计初衷是使JavaEE更加容易,为JavaBean提供配置框架,使程序易于测试,设计目标是简单易用,与应用程序解耦,致力于集成其他解决方案,而不是竞争。Spring不仅仅限于服务器端的开发,从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中学习受益。
怎么做?
Spring包括Core+Context,Aop,Dao,ORM,Web(SpringMVC),JEE 等模块。
这里着重介绍下Ioc和Aop两大核心模块。
IoC简介
IoC(Inversion of Control)控制反转,对象创建责任的反转,在spring中BeanFacotory是IoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系。
spring中有三种注入方式,一种是set注入,一种是接口注入,另一种是构造方法注入。
IOC,字面理解是控制反转,即对象的控制权被反转了(是什么)。之前一个对象中依赖另一个对象,需要自己new出来,当对象间的依赖关系非常复杂时,这个过程就变得很繁琐,并且代码间的耦合会很高。现在可以通过Ioc容器来管理控制对象的生成,可以把对象的实例化过程简单化,代码间解耦(为什么)。具体可以从DI(Dependency Injection) DL(Dependency Lookup)两个角度理解Ioc。DI中注入的方式包括属性,构造器,setter注入,DL含义是通过容器的API来查找所依赖的资源和协作对象,从Ioc容器维护的bean map中取出来(怎么做)
Aop简介
Aop就是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
为什么?
利用Aop可以对业务逻辑的各部分进行隔离,从而降低各部分耦合度,提高程序的可重用性,提高开发效率
怎么做?
spring中面向切面变成的实现有两种方式,一种是动态代理,一种是CGLIB,动态代理必须要提供接口,而CGLIB实现是有继承,即,
- 接