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

 

Spring框架

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

从抽象工厂开始说起

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

Dao层

UserDao接口代码如下所示。

 

  1. public interface UserDao {  
  2.    
  3.   public void addUser(String username,String password);  
  4.     
  5. }  
  6.    
  7. Dao层UserDao实现UserDaoMySqlImpl.java  
  8. public class UserDao4MySqlImpl implements UserDao {  
  9.    
  10.   @Override  
  11.   public void addUser(String username, String password) {  
  12.      System.out.println("UserDao4MySqlImpl.addUser()");  
  13.    
  14.   }  
  15.    
  16. }  


Dao层UserDao实现UserDaoOracleImpl.java

 

  1. public class UserDao4OracleImpl implements UserDao {  
  2.    
  3.   @Override  
  4.   public void addUser(String username, String password) {  
  5.      System.out.println("UserDao4OracleImpl.addUser()");  
  6.    
  7.   }  
  8.    
  9. }  


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

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

Manager层接口UserManager.java

 

  1. public interface UserManager {  
  2.    
  3.   public void addUser(Stringusername,String password);  
  4. }  


Manager层实现UserManagerImpl.java

 

  1. public class UserManagerImpl implements UserManager {  
  2.    
  3.   @Override  
  4.   public void addUser(String username, String password) {  
  5.    
  6.      //服务(对象)定位,由我们的应用程序负责服务(对象)定位.//主动  
  7.      //UserDao userDao = new UserDao4MySqlImpl();  
  8.      //如果想要换实现,就要可以换了.  
  9.      UserDao userDao = new UserDao4OracleImpl();  
  10.      userDao.addUser(username,password);  
  11.        
  12.        
  13.   }  
  14.    
  15. }  


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

 

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


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

所以Spring应运而生,Spring封装了更多的重复和复杂,不但封装了工厂,并且封装了创建时出现的线程安全问题,Spring可以管理Connection,在使用hibernate的时候我们需要管理session,一线程一session,session连接我们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来实现,从而对比出Spring的IOC强大之处。

出处:http://blog.csdn.net/lovesummerforever/article/details/22500339#

原文地址:https://www.cnblogs.com/handsome1013/p/4875328.html