首页 > 代码库 > 深入探索spring技术内幕(一): spring概述
深入探索spring技术内幕(一): spring概述
一、Spring是什么?
Spring是一个开源的控制反转 ( IoC ) 和面向切面 ( AOP ) 的容器框架, 它的主要目的是简化企业开发.
二、控制反转(IoC)
控制反转: 所谓的控制反转就是应用本身不负责依赖对象的创建及维护, 依赖对象的创建及维护是由外部容器负责的.
这样控制权就由应用转移到了外部容器, 控制权的转移就是所谓的反转.
public class PersonServiceBean { // 自己new一个对象 private PersonDao personDao = new PersonDaoBean(); public void save(Person person) { personDao.save(person); } } public class PersonServiceBean { // 由spring通过set方法注入对象 private PersonDao personDao; public void save(Person person) { personDao.save(person); } public void setPersonDao(PersonDao personDao) { this.personDao = personDao; } }
三、依赖注入(DI)
依赖注入: 所谓的依赖注入就是在运行期, 由外部容器动态地将依赖对象注入到组件中.
为了能更好的理解依赖注入, 我们不妨问自己两个问题:
1. 谁依赖谁? 为什么需要依赖?
当然是应用程序依赖于IoC容器, 应用程序需要IoC容器来提供对象需要的外部资源.
2. 谁注入谁? 注入了什么?
当然是IoC容器注入应用程序某个对象, 注入对象所需要的外部资源(对象, 资源, 常量数据).
其实IoC和DI是统一个概念的不同角度描述, 相对IoC而言, ‘依赖注入‘ 明确描述了被注入对象依赖IoC容器配置依赖对象.
四、为何要用Spring
在项目中引入spring可以给我们带来以下好处:
1. 降低组件之间的耦合度, 实现软件各层之间的解耦.
2. 可以使用容器提供的众多服务, 如: 事务管理服务, 消息服务等. 当我们使用容器管理事务时, 开发人员就不再需要手动控制事务,
也不需要处理复杂的事务传播.
3. 容器提供单例模式支持, 开发人员不再需要自己编写实现代码.
4. 容器提供AOP技术, 利用它很容易实现如权限控制等功能.
5. 容器提供众多辅助类如: JdbcTemplate、HibernateTemplate等, 使用这些类能够加快应用的开发.
6. spring为主流的应用框架提供了集成支持, 如集成Hibernate、JPA、Struts等, 方便我们的开发.
五、轻量级与重量级
spring属于轻量级框架还是重量级框架?
划分一个应用属于轻量级还是重量级, 主要看他使用了多少服务. 使用的服务越多, 容器就要为普通java对象做的工作越多,
必然会影响到应用的发布时间及运行性能.
对于spring容器, 它提供了很多服务, 但这些服务并不是默认为应用打开的, 应用需要某种服务, 还需要指明使用该服务, 如果应用使用的服务很少,
如: 只使用spring核心服务, 那么我们可以认为此时应用属于轻量级的, 如果应用使用了spring提供的大部分服务,这时应用就属于重量级的.
目前EJB容器就因为它默认为应用提供了EJB规范中所有的功能, 所以它属于重量级.