现在的位置: 首页 > 综合 > 正文

Spring旅程(一)为什么使用Spring

2014年09月05日 ⁄ 综合 ⁄ 共 2661字 ⁄ 字号 评论关闭

Spring框架

Spring有春天、弹簧、跳跃和泉眼的意思。Spring是一个开源的框架,是为了解决企业应用程序开发复杂性由RodJohnson创建的。虽然Spring是为企业级应用推出的,但是所有的java系统开发都可以使用Spring,包括桌面应用程序和企业级Web应用。Spring总不是凭空而出现的,任何框架也是,前面我们所说的strutshibernate都有他出现的原因,以及是哪些问题促使了人们开发出新的框架。那为什么使用Spring框架呢?

 

从抽象工厂开始说起

曾近我们在Dao层为了解决更换数据库的难题,我们自己动手写工厂,让工厂去创建从而在客户端调用时隐藏了具体的创建细节,这样我们就可以更换数据库了。在Service层也同样是可以用到抽象工厂,为了适应用户需求变动,我们在sevice层应用抽象工厂,让web调用只调用接口,具体创建放到工厂里,这样我们就可以通过更换不同的.class文件来更换不同的业务实现。下面我们就简单的通过一个程序来说明。

Dao

UserDao接口代码如下所示。

public interface UserDao {
 
  public void addUser(String username,String password);
  
}
 
Dao层UserDao实现UserDaoMySqlImpl.java
public class UserDao4MySqlImpl implements UserDao {
 
  @Override
  public void addUser(String username, String password) {
     System.out.println("UserDao4MySqlImpl.addUser()");
 
  }
 
}

DaoUserDao实现UserDaoOracleImpl.java

public class UserDao4OracleImpl implements UserDao {
 
  @Override
  public void addUser(String username, String password) {
     System.out.println("UserDao4OracleImpl.addUser()");
 
  }
 
}

这样我们创建了Dao层的接口,并且给出了对于不同数据库驱动的不同实现。

 

业务逻辑层manager(在这里先不引入工厂)

Manager层接口UserManager.java

public interface UserManager {
 
  public void addUser(Stringusername,String password);
}

Manager层实现UserManagerImpl.java

public class UserManagerImpl implements UserManager {
 
  @Override
  public void addUser(String username, String password) {
 
     //服务(对象)定位,由我们的应用程序负责服务(对象)定位.//主动
     //UserDao userDao = new UserDao4MySqlImpl();
     //如果想要换实现,就要可以换了.
     UserDao userDao = new UserDao4OracleImpl();
     userDao.addUser(username,password);
     
     
  }
 
}

在这里尚且没有使用抽象工厂+配置文件,来看我们的客户端调用。

public class client {
 
  /**
   * @param args
   */
  public static void main(String[] args) {
     //TODO Auto-generated method stub
     //服务(对象)定位,由我们的应用程序负责服务(对象)定位.
     //因为自己产生了主动的查找.所以必须依赖,并且写死.
     UserManager userManager = new UserManagerImpl();
     
     userManager.addUser("张三","123");
           
 
  }
 
}

我们如果要更换数据库需要打开UserManagerImpl类去更改不同的实现,同样在client调用如果要更改不同的业务也需要不同的UserManager实现。即便我们加上抽象工厂+配置文件同样同样需要在界面调service层使用和在调用Dao层使用,让程序变的更加复杂,每个项目都要去写,多个项目也是如此,当业务逻辑复杂的时候,我们就需要些多个工厂去创建不同的产品,并且在使用工厂的时候还要注意每次创建保证一个实例,这所有的一切一切,即便是工厂都是我们程序员手动去写的,这样就比较重复了,是我们去管理这些类,为什么不让机器去管理呢?


所以Spring应运而生,Spring封装了更多的重复和复杂,不但封装了工厂,并且封装了创建时出现的线程安全问题,Spring可以管理Connection,在使用hibernate的时候我们需要管理session,一线程一sessionsession连接我们lazy的有效期,spring提供一个Filter,我们不用再管理session的创建和销毁,spring帮我们去管理了。


下面大概了解一下Spring中将会时常提起的一些名词。


简单的来说,Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。

轻量级:大小与开销方面而言Spring是轻量的。

非侵入式Spring应用中的对象不依赖于Spring的特定类。

控制反转Spring通过一种称为控制反转(IOC)的技术促进了松耦合。当应用了IOC一个对象依赖的其他对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。

切面编程Spring提供了切面编程的丰富支持,允许分离应用的业务逻辑与服务。

容器Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建一个可配置的原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例,以及它们是如何关联的。

框架Spring可以将简单的组件配置,组成为复杂的应用,在Spring中应用对象被声明式组合,典型地是在一个XML文件里,Spring提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了我们。

大概知道这些名词吧,后续的文章会应用实例详细的说明Spring的功能。


下篇我们将把上述的例子用Spring来实现,从而对比出SpringIOC强大之处。

 

 

抱歉!评论已关闭.