轻量级框架是相对于重量级框架而言的,重量级框架必须依赖特定的容器,例如EJB框架就必须运行在Glassfish、JBoss等支持EJB的容器中,而不能运行在Tomcat中。——《Java Web整合开发 王者归来》
Spring以IoC、AOP为主要思想,其中IoC,Inversion of Control 指控制反转或反向控制。在Spring框架中我们通过配置创建类对象,由Spring在运行阶段实例化、组装对象。AOP,Aspect Oriented Programming,面向切面编程,其思想是在执行某些代码前执行另外的代码,使程序更灵活、扩展性更好,可以随便地添加、删除某些功能。Servlet中的Filter便是一种AOP思想的实现。

Spring同时也是一个“一站式”框架,即Spring在JavaEE的三层架构[表现层(Web层)、业务逻辑层(Service层)、数据访问层(DAO层)]中,每一层均提供了不同的解决技术。如下:
- 表现层(Web层):Spring MVC
- 业务逻辑层(Service层):Spring的IoC
- 数据访问层(DAO层):Spring的jdbcTemplate
- 轻量级 spring是非侵入性的 - 基于spring应用的开发中的对象可以不依赖于spring的API
- 依赖注入 DI
- 面向切面编程 AOP
- 容器 spring是一个容器,因为它包含和管理应用对象的生命周期
- 框架 spring实现了使用简单的组件配置组合成一个复杂的应用,在spring中可以使用xml和java注解组合这些对象
- 一站式 在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库
在Spring IOC 容器读取bean配置、创建bean之前,必须对他进行实例化,只有在容器实例化后,才能从IOC容器里获取bean实例并使用它
3.1 spring提供了两种类型的IOC容器实现
- BeanFactory: IOC容器的基本实现
- ApplicationContext: 提供了更多的高级特性,是BeanFactory的子接口
BeanFactory是Spring框架的基础设施,面向Spring本身;ApplicationContext面向Spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory
DI,依赖注入,向类的属性设置值。
IoC与DI的关系:依赖注入不能单独存在,需要在IoC基础之上完成操作。





Singleton:单例作用域,是spring容器默认的作用域,使用singleton作用域生成的是单实例,在整个Bean容器中仅保留一个实例对象供所有调用者共享引用。单例模式一般适用于那些无会话状态的Bean(比如辅助工具类,DAO组件,业务逻辑组件等等)
Prototype:原型模式,这是多实例作用域,针对每次不同请求,Bean容器均会生成一个全新的Bean实例以供调用者使用,他适用于那些需要保持会话状态的Bean实例,有一点值得注意:Spring不能对一个property bean的整个生命周期负责,容器在初始化、装配好一个property实例之后,就将他交给客户端,就不管了。因此客户端要负责property实例的生命周期管理
Request:针对每次HTTP请求,spring容器都会根据bean的定义创建一个全新的bean实例,并且该bean实例仅在当前http request内有效,因此可以根据需要放心的更改实例内部状态,而其他请求中根据Bean定义创建的实例,不会看到这些特定于某些请求的状态变化,当处理请求结束,request作用域的Bean实例将被销毁,该作用域仅在基于web的springApplicationContext情形下才有效
Session:针对某个HTTP session ,Spring容器会根据bean定义创建一个全新Bean实例,并且该Bean实例仅在当前的HTTP session内有效。该作用域仅在基于web的spring ApplicationContext情形下才有效
Singleton:单例作用域,是spring容器默认的作用域,使用singleton作用域生成的是单实例,在整个Bean容器中仅保留一个实例对象供所有调用者共享引用。单例模式一般适用于那些无会话状态的Bean(比如辅助工具类,DAO组件,业务逻辑组件等等)
Prototype:原型模式,这是多实例作用域,针对每次不同请求,Bean容器均会生成一个全新的Bean实例以供调用者使用,他适用于那些需要保持会话状态的Bean实例,有一点值得注意:Spring不能对一个property bean的整个生命周期负责,容器在初始化、装配好一个property实例之后,就将他交给客户端,就不管了。因此客户端要负责property实例的生命周期管理
Request:针对每次HTTP请求,spring容器都会根据bean的定义创建一个全新的bean实例,并且该bean实例仅在当前http request内有效,因此可以根据需要放心的更改实例内部状态,而其他请求中根据Bean定义创建的实例,不会看到这些特定于某些请求的状态变化,当处理请求结束,request作用域的Bean实例将被销毁,该作用域仅在基于web的springApplicationContext情形下才有效
Session:针对某个HTTP session ,Spring容器会根据bean定义创建一个全新Bean实例,并且该Bean实例仅在当前的HTTP session内有效。该作用域仅在基于web的spring ApplicationContext情形下才有效
Spring 的基础:
最基本最重要的包:
Org.springframework.beans
Org.springframework.context
基本的class:
BeanFactory
ApplicationContext