您的位置:首页 > 编程语言 > Java开发

初识Spring——whySpring

2013-11-23 20:40 218 查看
    在介绍spring之前,我下那个先给出一个例子,解决为什么我们需要spring?

 

whySpring?

下面我们使用三层开发写一个添加用户的demo:

首先我们实现D层的抽象接口:UserDao

public interface UserDao {

public void addUser(String username, String password);
}


 假使我们需要两个实现该接口的类,分别用于实现MySQL和Oracle。

实现MySQL:

public class UserDaoMySqlImpl implements UserDao {

@Override
public void addUser(String username, String password) {
System.out.println("UserDaoMySqlImpl.addUser()");

}

}


 实现Oracle:

public class UserDaoOracleImpl implements UserDao {

@Override
public void addUser(String username, String password) {
System.out.println("UserDaoOracleImpl.addUser()");

}

}


 现在我们来实现B层的类,B层同样建立接口UserManager,UserManagerImpl实现该类并且调用D层的添加数据:

public class UserManagerImpl implements UserManager {

@Override
public void addUser(String username, String password) {

//由我们程序负责服务(对象)定位
UserDao userDao = new UserDaoMySqlImpl();
userDao.addUser(username, password);

}

}


 从这里我们就可以看出,当我们需要对数据库进行转换时,我们需要重新打开该类改变对该类所调用的对象,这不符合我们的“多扩展,少修改”原则,所以,如果是之前,我们可以使用抽象工厂加反射实现该功能,但是,当我们继续往下做,我们发现在U层调用的时候,同样遇到该问题:

U层代码:

public static void main(String[] args) {
UserManager user = new UserManagerImpl();
user.addUser("张三", "213");
}


 

U层同样需要知道B层具体的实现对象,这里如果继续用抽象工厂加反射的话就略显麻烦了,所以,这里就需要引入spring这个东西。

 

什么是spring

 

业应用开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性的角度而言,绝大部分Java应用都可以从Spring中受益。

 

  ◆目的:解决企业应用开发的复杂性

  ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

  ◆范围:任何Java应用

 

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

 

根据上面的定义,我们可以发现关于spring的五个关键字,这可以说是spring的核心,在很多面试中经常会问到使用spring的好处,我想,如果想了解它的好处,那么他的核心特质我们应该有一定的了解:



 

下面我们分别介绍一下这几个关键字的含义:

  ◆ 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

  ◆ 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

  ◆ 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

  ◆ 容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

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

 

 

使用spring的好处?

 

现在我们队spring有一定的了解,但是,spring的使用除了可以解决我上述的问题以外,还有哪些好处呢?

  ◆Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB。如果你仅仅使用了Struts或其他的包含了J2EE特有APIs的framework,你会发现Spring关注了遗留下的问题,。

 

  ◆Spring能消除在许多工程上对Singleton的过多使用。根据我的经验,这是一个主要的问题,它减少了系统的可测试性和面向对象特性。

 

  ◆Spring能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置。曾经感到迷惑,一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读Javadoc乃至源编码吗?有了Spring,你可很简单地看到类的JavaBean属性。倒置控制的使用(在下面讨论)帮助完成这种简化。

  ◆ Spring能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。

  ◆ Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。

  ◆ 使用Spring构建的应用程序易于单元测试。

  ◆ Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。

  ◆ Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适于许多web应用。例如,Spring能使用AOP提供声明性事务而不通过使用EJB容器,如果你仅仅需要与单个的数据库打交道,甚至不需要JTA实现。

  ◆ Spring为数据存取提供了一致的框架,不论是使用JDBC或O/R mapping产品(如Hibernate)。

Spring确实使你能通过最简单可行的解决办法解决你的问题。这些特性是有很大价值的。

 

Spring既然有这么多好处,那么他是怎么解决我的问题呢,请听下回分解。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: