Spring是一个开源的控制反转(Inversion of Control,IOC)和面向切面(AOP)的容器框架,它的主要目的就是简化企业开发。
1、控制反转
publlic class PersonServiceBean{
private PersonDao persondao = new PersonDaoBean();
public void save(Person person){
personDao.save(person);
}
}
PersonDao是在应用内部创建以及维护的。所谓控制反转就是应用本身不负责依赖对象的创建以及维护,依赖对象的创建以及维护是由外部容器负责的。这样控制权就由应用转移到外部容器,控制权的转移就是所谓的反转。
2、依赖注入
publlic class PersonServiceBean{
private PersonDao persondao;
publlic PersonServiceBean(PersonDao persondao)
{
this.personDao = personDao;
}
public void save(Person person){
personDao.save(person);
}
}
所谓依赖注入就是指:在运行期间,由外部容器动态地将依赖对象注入到组件中。
3、为什么使用Spring
有以下好处:
(1)降低组件之间的耦合度,实现软件各层之间的解耦
(2)可以使用容器提供的众多服务,如事务管理服务,消息服务等。
当我们使用容器管理事务时,开发人员就不再需要自己手工控制事务,也不需处理 复杂的事务传播。
(3)容器提供了单例模式支持,开发人员不再需要自己编写实现代码。
(4)容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控功能等。
(5)容器提供的众多辅佐类,使用这些类能够加快应用的开发,如:JDBCTemolate、HibernateTemplate。
(6)Spring对于主流的应用 提供了集成支持,如:集成Hibernate、JPA、Struts。
4、轻量级与重量级概念的划分
区分一个应用是轻量级还是重量级,主要看它使用了多少服务,使用的服务越多,容器要为为普通java对象做的工作越多,必然会影响应用的发布时间或者是运行性能。
对于Spring容器,它提供了很多服务,但这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明使用该服务,如果应用使用的服务很少,如只使用了Spring核心服务,那么我们可以认为此时应用属于轻量级的,如果应用使用了Spring提供额大部分服务,这是应用就属于重量级。目前EJB容器就因为它默认为应用提供了EJB规范中的所有的功能,所以它属于重量级。