Tuesday, October 5, 2010

Spring v3.0.2 Learning Note 1 - Introduction to Spring Framework

  • 官网地址 
           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好处
  1. 降低组件之间耦合度,进而实现软件各层之间的解耦。
  2. 容器本身提供了众多服务,如事务管理,消息服务等。
  3. 提供了AOP技术,很容易实现如权限拦截、运行期监控等功能。
  4. 提供众多辅助类,简化开发,比如JdbcTemplate、HibernateTemplate等
  5. 对主流应用框架的支持,比如Hibernate、Struts等。
  6. ......
  • 轻量级与重量级
划分一个应用为轻量级或重量级,主要看其使用了多少服务,使用的服务越多,容器要为Java对象做的工作越多,必然会影响部署复杂程度和运行效率。
对于spring容器,它提供了很多服务,但这些服务在默认状态下并不是打开的,需要应用需要某种服务,则需指明要使用该服务,如果使用的服务很少,比如spring core服务,可认为是轻量级服务。如果应用使用了spring 提供的大部分服务,这时应用就属于重量级。目前EJB容器就因为它默认为应用提供了EJB规范的所有服务,所以它属于重量级。

No comments:

Post a Comment