JavaWeb 之 Spring 快速入门

Spring 快速入门。


Spring 框架的概述和入门


什么是 Spring 框架

Spring 框架的概述

  • Spring 是一个开放源代码的设计层面框架,他解决的是 业务逻辑层 和其他各层的松耦合问题。

  • Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作 《Expert One-On-One J2EE Development and Design》 中阐述的部分理念和原型衍生而来。

  • 它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

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

  • Spring 的核心是 控制反转(IoC)面向切面(AOP)。简单来说,Spring 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级开源框架。

  • Java EE 开发分成三层结构

    WEB层 ———— Spring MVC
    业务层 ———— Bean管理:(IoC)
    持久层 ———— Spring 的 JDBC 模板。ORM 模板用于整合其他的持久层框架。

Spring 框架的特点

  • 方便解耦,简化开发

    Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 Spring 管理。

  • AOP 编程的支持

    Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。

  • 声明式事务的支持

    只需要通过配置就可以完成对事务的管理,而无需手动编程。

  • 方便程序的测试

    Spring 对 Junit4 支持,可以通过注解方便的测试 Spring 程序。

  • 方便集成各种优秀框架

    Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts2、Hibernate、MyBatis、Quartz等)的直接支持。

  • 降低 JavaEE API 的使用难度

    Spring 对 JavaEE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等),都提供了封装,使这些 API 应用难度大大降低。


Spring 框架的 IoC 核心功能快速入门


IoC 的功能

  • IoC(Inverse of Control),控制反转,将对象的创建权反转给 Spring !!

  • 使用 IoC 可以解决的程序 耦合性高 的问题!!

IoC 快速入门

步骤一:下载 Spring 框架的开发包

步骤二:创建 JavaWEB 项目,引入 Spring 的开发包

引入Spring框架IoC核心功能需要的具体的jar包

  • Spring 框架的 IoC 的功能,那么根据 Spring 框架的体系结构图能看到,只需要引入如下的 jar 包

    Beans
    Core
    Context
    Expression Language

Spring 框架也需要引入日志相关的 jar 包

  • spring-framework-3.0.2.RELEASE-dependencies/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1

com.springsource.org.apache.commons.logging-1.1.1.jar

引入 log4j 的jar包

  • spring-framework-3.0.2.RELEASE-dependencies\org.apache.log4j\com.springsource.org.apache.log4j\1.2.15

com.springsource.org.apache.log4j-1.2.15.jar

注意:记得在 src 目录下导入 log4j 的属性文件 log4j.properties

步骤三:编写 Java 类

创建对应的包结构,编写 Java 的类。

注意:以后使用 Spring 框架做开发,都需要来编写接口与实现类!!

  • com.renkaigis.demo1

    UserService ———— 接口
    UserServiceImpl ———— 具体的实现类

步骤四:编写配置文件 applicationContext.xml

想把 UserServiceImpl 实现类的创建交给 Spring 框架来管理,需要创建 Spring 框架的配置文件,完成配置。

  • 在 src 目录下创建 applicationContext.xml 的配置文件,名称是可以任意的,但是一般都会使用默认名称!

  • 引入 spring 的约束,需要先找到具体的约束头信息!

  • spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html

  • 具体的约束如下:

1
2
3
4
5
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
  • 完成 UserService 的配置
1
2
<!-- Spring的快速入门 -->
<bean id="userService" class="com.renkaigis.demo1.UserServiceImpl"/>

步骤五:编写测试程序

采用 Spring 框架的 工厂方式 来获取到 UserService 接口的具体实现类!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.renkaigis.demo1;

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

/**
* 测试 IoC 的程序
*/
public class demo1 {
/**
* 原来的方式
*/
@Test
public void run1() {
UserService usi = new UserServiceImpl();
usi.sayHello();
}

/**
* 使用 Spring 框架的方式
*/
@Test
public void run2() {
// 创建工厂,加载核心配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
// 从工厂中获取对象
UserService us = (UserService) ac.getBean("userService");
// 调用对象的方法执行
us.sayHello();
}
}

Spring 框架中的工厂(了解)

ApplicationContext 接口

  • 使用 ApplicationContext 工厂的接口,使用该接口可以获取到具体的 Bean 对象。

  • 启动服务器的时候即创建好了对象。

  • 该接口下有两个具体的实现类:

    ClassPathXmlApplicationContext————加载类路径下的 Spring 配置文件
    FileSystemXmlApplicationContext————加载本地磁盘下的 Spring 配置文件

BeanFactory工厂(过时)

(是Spring框架早期的创建Bean对象的工厂接口)

  • 启动服务器的时候不会创建对象,只有在第一次调用的时候才会创建。

  • 使用 BeanFactory 接口也可以获取到 Bean 对象

1
2
3
4
5
public void run(){
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
UserService us = (UserService) factory.getBean("userService");
us.sayHello();
}

BeanFactoryApplicationContext 的区别

  • BeanFactory————BeanFactory 采取延迟加载,第一次 1getBean 时才会初始化 Bean

  • ApplicationContext————在加载 applicationContext.xml 时候就会创建具体的 Bean 对象的实例,还提供了一些其他的功能:

    事件传递
    Bean 自动装配
    各种不同应用层的 Context 实现