spring快速上手

1.Spring概述

Spring是一个开源框架,它能够降低开发企业应用程序的复杂性,可以使用Spring替代EJB开发企业级应用,而不用担心工作量太大、开发进度难以控制和复杂的测试过程等问题。Spring简化了企业级应用的开发,降低了开发成本,能够整合各种流行框架。它以IoC(控制反转)和AOP(面向切面编程)两种先进的技术为基础,完美的简化了企业级开发的复杂度。

1.1初识Spring

Spring框架主要由七大模块组成,他提供了企业级开发需要的所有功能,而且每个模块都可以单独使用,也可以和其他莫款组合使用,灵活且方便的部署可以使开发的程序更加简洁。

spring快速上手_第1张图片
Spring核心模块
  1. 核心模块:Spring Core模块是Spring的核心容器,他实现了IoC模式,提供了Spring框架的基础功能,在模块中包含最重要的BeanFactory类是Spring的核心类,负责对JavaBean的配置和管理。他采用了Factory模式实现了IoC容器,即依赖注入
    2.Context模块:Spring Context模块继承BeanFactory(或者说是Spring核心)类,并且添加了事件处理、国际化、资源装载、透明装载以及数据校验等功能。他还提供了框架式的Bean的访问方式和很多企业级的功能,如JNDI访问、支持EJB、远程调用、集成模板框架、E-mail和定时任务调度等。
    3.AOP模块:Spring集成了所有的AOP功能。通过事务管理可以使任意Spring管理的对象AOP化。Spring提供了用标准Java语言编写的AOP框架,他的大部分内容都是根据AOP联盟的API开发的,他使应用程序抛开EJB的复杂性,但拥有传统EJB的关键功能。
    4.DAO模块:提供JDBC的抽象层,简化了数据库厂商的异常错误,大幅度减少代码的编写,并且提供了对声明式事务和编程式事务的支持。
    5.ORM模块:提供对现有ORM框架的支持,各种流行的ORM框架已经做的非常成熟了,所以没有必要开发新的ORM工具,但是他对Hibernate提供了完美的整合功能,同时也支持其他的ORM工具。
    6.WEB模块:建立在Spring Context基础之上,他还提供了Servlet监听器的Context和Web应用的上下文,对现有的Web框架提供集成。
    7.MVC模块:建立在Spring的核心功能之上,这使得他能拥有Spring框架的所有特性,能够适应多种视图,模块技术、国际化和验证服务,实现控制逻辑和业务逻辑清晰的分离。

2.准备

在开始进行开发之前,我们首先需要获得Spring工具包、commons-logging包。并且我们可以简单的查看一下他们的官方文档。之后,我们就能正常的开展下一步了。

3.第一个Spring实例

笔者在介绍的过程中,先给出一个完整的spring简单实例,可以大体上的了解一些Spring的开发过程,然后,我们再进行介绍里面的原理。
步骤:

  • 首先,我们在eclipse中建立一个JavaProject,并创建SpringDemo工程
  • 其次,在SpringDemo工程的src目录下创建com.bean包,在该包下分别创建Person.java、ChineseImpl.java和AmercianImpl.java 3个文件,编辑代码如下:
    代码清单1:person.java
package com.bean;
public interface Person {
    public void speak();
}

代码清单2:ChineseImpl.java

package com.bean;
public class ChineseImpl implements Person {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public void speak() {
        // TODO Auto-generated method stub
        System.out.println("我是中国人,我的名字是" + this.name + ",                   我今年" + this.age + "岁!");
    }
}

代码清单3:AmercianImpl.java

package com.bean;

public class AmercianImpl implements Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public void speak() {
        // TODO Auto-generated method stub
        System.out.println("我是美国人,我的名字是" + this.name + ",我今年" + this.age + "岁!");
    }

}

上面的代码中,我们定义了一个person接口,通过该接口规定了Person的规范,并且进行了两个实例,在我们进行代码的编写的过程中,我们可以使用接口与实现的分离,这样可以大大的增大代码的重用性以及复用性。
那么,问题来了?在Spring中显然应该让Spring容器来负责调用这两个类的Setter方法以设置实例中属性的值。这在Spring中是如何实现的呢?根据我们在学习Struts2以及Hibernate中的知识我们可以想到应该使用XML配置文件来实现。下面我们在Spring中使用配置文件applicationContext.xml来告知容器应该如何对AmericanImpl和ChineseImpl进行配置

  • 在src目录下创建applicationContext.xml文件。



    
    
        
        
            小明
        
        
        
            10
        
    
    
    
        
        
            Tom
        
        
        
            15
        
    

上面的XML文件在Spring容器中声明了一个ChineseImpl实例chinese和一个AmercianImpl实例amercian并为其中的set方法进行赋值。

  • Test类
    在src目录下创建com.spring包,在该包下创建Test.java文件。
package com.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bean.Person;

public class Test {
    public static void main(String[] args) {
        /*创建spring容器*/
        //当然这里还有beanFactory接口,也能实现这种功能,ApplicationContext增加了更多的企业级应用
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        /*获取ChineseImpl实例的引用*/
        Person person = (Person) context.getBean("chinese");
        //调用ChineseImpl实例的speak()方法
        person.speak();
        person = (Person) context.getBean("amercian");
        person.speak();
    }
}

程序中。我们需要注意的是spring容器的创建,这样就能将applicationContext.xml文件加载进容器中,并且进行实例化,以及调用set方法进行赋值,这样就能为其中实现一个最基本的Spring操作应用了。
**
ChineseImpl和AmericanImpl类的实例并不是main()方法来创建的,而是通过将applicationContext.xml文件加载后,交付给Spring框架,当执行getBean()方法时,就可以得到要创建实例的引用,因此,调用者并没有创建实例,而是通过Spring框架将创建好的实例注入调用者中,这实际上就是Spring的核心控制:依赖注入(DI),而Spring强大的地方就在于他可以使用依赖注入将一个Bean注入到另一个Bean中。
**

4. Spring的IoC容器

Spring的IoC容器是一个提供IoC支持的轻量级容器,IoC容器为管理对象之间的依赖关系提供了基础功能。Spring为我们提供两种容器:BeanFactory和ApplicationContext。
BeanFactory在Spring中的作用至关重要,他实际上是一个用于配置和管理Java类的内部接口。顾名思义,BeanFactory就是一个管理Bean的工厂,它负责初始化各种Bean并调用他们的生命周期方法。
当然,在进行XML文件的配置的时候,我们也可以选择使用annotation(注解)来进行编写里面的配置关系,而且感觉上比使用XML文件来的更加的直接方便。

5.Spring框架的优势

  • Spring框架能够有效的组织中间层对象,Spring框架能够有效的将现有的框架如Struts和Hibernate框架组织起来。
  • Spring框架实现了真正意义上的面向接口编程,可实现组件之间的高度解耦,而面向接口编程是一种良好的编程习惯。
  • Spring所秉承的设计思想就是让使用Spring创建的那些应用都尽可能少地依赖于它的APIs。在Spring应用中的大多数业务对象都不依赖于Spring。
  • 使用Spring构建的应用程序易于进行单元测试
  • Spring提高了代码的可重用性,它尽可能避免在程序中使用硬解码。Spring可以将应用程序中的某些代码抽象出来,然后在其他程序中使用这些代码。
  • Spring为数据存取提供了一个一致的框架,简化了底层数据库的访问方式。

你可能感兴趣的:(spring快速上手)