- 官网地址
http://www.springsource.org/
- 控制反转 Inversion of Control
public class PersonManager {
IPersonDao personDao = new PersonDao();
public void save(Person person) {
personDao.save(person);
}
}
类PersonManager依赖于类PersonDao,传统做法PersonDao是在应用内部创建和维护 。控制反转就是应用本身不负责倚赖对象的创建和维护 ,而是将创建和维护交给外部容器负责,比如spring. 这样控制权就从应用本身转移到了外部容器,控制权的转移就是反转。
- 依赖注入 Dependency Injection
依赖注入指在运行期 间,由外部容器动态地 将依赖对象注入到组件中。
public class PersonManager {
IPersonDao personDao; // 是用接口定义依赖类
// 本例采用构造器的方式让容器将依赖对象注入到PersonManager类中
// 当然sping还提供了其他的注入方式,比如setter的方式
public PersonManager(IPersonDao personDao) {
this.personDao = personDao;
}
public void save(Person person) {
personDao.save(person);
}
}
- Spring好处
- 降低组件之间耦合度,进而实现软件各层之间的解耦。
- 容器本身提供了众多服务,如事务管理,消息服务等。
- 提供了AOP技术,很容易实现如权限拦截、运行期监控等功能。
- 提供众多辅助类,简化开发,比如JdbcTemplate、HibernateTemplate等
- 对主流应用框架的支持,比如Hibernate、Struts等。
- ......
- 轻量级与重量级
划分一个应用为轻量级或重量级,主要看其使用了多少服务,使用的服务越多,容器要为Java对象做的工作越多,必然会影响部署复杂程度和运行效率。
对于spring容器,它提供了很多服务,但这些服务在默认状态下并不是打开的,需要应用需要某种服务,则需指明要使用该服务,如果使用的服务很少,比如 spring core服务,可认为是轻量级服务。如果应用使用了spring 提供的大部分服务,这时应用就属于重量级。目前EJB容器就因为它默认为应用提供了EJB规范的所有服务,所以它属于重量级。