第一章 Spring基础
1.1 Spring介绍
-
Spring是一个框架,框架是高度抽取、可重用的代码的一种设计。Spring就是多个可重用的模块的集合,从而形成一个领域的整体解决方案。
-
Spring是一个IOC(DI)和AOP容器框架
Spring的优良特性:
- 非侵入式:基于Spring开发的应用中的对象可以不依赖Spring的API
- 依赖注入:DI(Dependency Injection),控制反转**(IOC:invesion of control)**最经典的实现
- 面向切面编程:AOP(Aspect Oriented Programming)
- 容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期,容器可以帮我们管理所有的组件(类)
- 组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用,在Spring中可以使用XML和Java注解注册对象
- 一站式:在IOC和AOP的基础之上可以整合各种企业应用的开源项目和优秀的第三方Jar包
1.2 Spring中的IOC和AOP
Spring的模块图:
从下到上依次为:
测试(Test):
Spring的单元测试模块
核心容器(Core Container):
IOC
-Beans:Spring Bean相关,如依赖查找、依赖注入
-Core:核心库
-Context:上下文
-Expression Language:表达式语言
Aop+Aspects(面向切面编程模块):
数据访问(Data Assess):
-JDBC:操作数据库的模块
-ORM(Object Relation Mapping):对象关系映射
-OXM(Object Relation Mapping) :对象XMl映射
-JMS:消息服务
-Transaction:事务
Web(开发Web应用的模块):
-web:webSocket
-Servlet:Servlet
-Portlet:
-Struts:
注意:Spring中的包很多,用到那个,就导入那个,导入不需要使用的包会降低性能
1.2.1 IOC
IOC是Inversion of control的缩写 ,翻译为控制反转,它不是什么技术,而是一种设计思想。
控制:在以前,我们是自己在对象内部通过new去创建对象,也就是程序主动去创建依赖对象。在Spring中,IOC容器来控制对象的创建。
反转:在以前,由我们去主动控制去获取依赖对象,也就是正转。在Spring中,由IOC容器来帮忙创建以及注入依赖对象,我们是被动的使用Spring注入的依赖对象,也就是反转。
1.2.2 DI
DI是英文Dependency Injection的缩写,翻译为依赖注入。
应用程序因为需要IOC容器来提供对象所需要的的外部资源,所以程序依赖IOC容器,同时,IOC容器知道某个组件运行时需要哪些其他组件(对象),然后通过反射的形式将容器中准备好的对象(利用反射给属性赋值)注入到这个组件中。
IOC的一个重点就是在系统运行中,动态的向某个对象提供它依赖的对象,这就是通过DI来实现的。
例如,我们经常会写这样的代码:
// 主动创建对象
getIceCola{
Ice ice = new Ice("-2C");
Cola cola = new Cloa(400);
Cup cup = new Cup("大杯");
Machin machin = new Machin("冰可乐机");
return machin.makeIceCola(ice, cola, cup);
}
上面创建对象的方式就是主动式,上面的例子比较简单,设想一下,如果需要创建很多对象,且这些对象初始化需要很多变量,是不是会很麻烦。
在Spring中,采用的是被动式的创建对象,也就是对象的创建和控制权交给了Spring,我们是被动的来接收和使用Spring给我们提供的对象。当然,前提是需要配置好这些对象。
使用Spring之后,我们这样写代码:
// 主动创建对象
getIceCola{
@Autowired
Ice ice;
@Autowired
Cola cola;
@Autowired
Cup cup;
@Autowired
Machin machin;
return machin.makeIceCola(ice, cola, cup);
}
容器管理了所有的组件(有功能的类),上面的getIceCola也可以受容器管理。当容器发现BookServlet需要用到BookService类,它就会创建BookService对象,也就是说,之前,我们需要某个对象,我们需要主动的去new,但在Spring中,Spring发现我们需要某个类的对象时,它会自动帮我们创建,程序是被动的去接收IOC提供的对象。