四时宝库

程序员的知识宝库

【Spring系列教程一】一文了解Spring基础

1.1 Spring概述

Spring是一个于2003年兴起的轻量级的Java开源开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。Spring让开发人员有更多的精力投入到业务逻辑开发中,而不需要将其应用程序绑定到特定的部署环境,是为了降低企业应用开发的复杂性而创建的。可以把Spring理解成一个大容器,这个容器可以整合现有的各种技术框架。Spring框架的主要优势是方便各种框架集成,降低了Java EE开发的难度。

1.2 Spring体系结构

Spring是一个大容器,可以集成各种技术。如图所示是Spring支持的各种技术。

下面依次介绍Spring支持的各种技术。

  1. Core Container

Spring的核心容器由Beans、Core、Context、SpEL等模块组成。所有Spring的其他模块都是建立在Core Container基础模块上的。该模块规定了创建和维护Bean的方式,提供了控制反转(IoC)和依赖注入(DI)等特性。

  • Spring-beans模块:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
  • Spring-context模块:建立在Core和Beans模块的基础之上,提供一个框架式的对象访问方式,是访问定义和配置的任何对象的媒介。ApplicationContext接口是Context模块的焦点。
  • Spring-context-support模块:支持整合第三方库到Spring应用程序上下文,特别是用于高速缓存(EhCache、JCache)和任务调度(CommonJ、Quartz)的支持。
  • Spring-expression模块:提供了强大的表达式语言去支持运行时查询和操作对象图。这是对JSP 2.1规范中规定的统一表达式语言(UnifiedEL)的扩展。该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器的内容、逻辑和算术运算、变量命名以及从Spring的IoC容器中以名称检索对象。它还支持列表投影、选择以及常见的列表聚合。
  1. Data Access/Integration

数据访问/集成模块提供了对JDBC、ORM、OXM、JMS和Transaction等模块的集成。使主流的ORM框架,持久化框架和消息中间件可以很方便地集成到Spring中,降低开发人员对这些框架的维护成本,提升了开发效率。

  • Spring-jdbc模块:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析。
  • Spring-orm模块:为流行的对象关系映射(Object-RelationalMapping)API提供集成层,包括JPA和Hibernate。使用Spring-orm模块可以将这些O/R映射框架与Spring提供的所有其他功能结合使用,例如声明式事务管理功能。
  • Spring-oxm模块:提供了一个支持对象/XML映射的抽象层实现,例如JAXB、Castor、JiBX和XStream。
  • Spring-jms模块(Java Messaging Service):指Java消息传递服务,包含用于生产和使用消息的功能。自Spring 4.1以后,提供了与Spring-messaging模块的集成。
  • Spring-tx模块(事务模块):支持用于实现特殊接口和所有POJO(普通Java对象)类的编程和声明式事务管理。
  1. Web模块

Web模块提供了对Web开发相关技术的集成,对开发模型-视图-控制器(MVC)项目提供便利。

  • Spring-web模块:提供了基本的Web开发集成功能,例如多文件上传功能、使用Servlet监听器初始化一个IoC容器以及Web应用上下文。
  • Spring-webmvc模块:也称为Web-Servlet模块,包含用于Web应用程序的Spring MVC和REST Web Services实现。Spring MVC框架提供了领域模型代码和Web表单之间的清晰分离,并与Spring Framework的所有其他功能集成,本书后续章节将会详细讲解Spring MVC框架。
  • Spring-websocket模块:Spring 4.0以后新增的模块,它提供了WebSocket和SockJS的实现。
  • Portlet模块:类似于Servlet模块的功能,提供了Portlet环境下的MVC实现(已废弃)。
  1. AOP模块

AOP模块提供了AOP联盟提倡的面向切面编程的实现环境。AOP将代码按功能进行分离,降低了模块间代码的耦合度。

  • Spring-aop模块:提供了一个符合AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。
  • Spring-aspects模块:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架。
  • Spring-instrument模块:提供了类植入(Instrumentation)支持和类加载器的实现,可以在特定的应用服务器中使用。
  1. Test模块

Test模块支持JUnit和TestNG等单元测试模块的集成,还提供了mock对象,使开发人员可以更加独立的测试代码。

1.3 新建Spring项目

  1. 新建Maven项目
  1. 在pom.xml中导入如下依赖:
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${spring.version}</version>
</dependency>
  1. 在Java目录下新建JavaBean Student,代码如下:
package cn.bytecollege.bean;

public class Student {
    private String name;
    private int age;
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void sayHello(){
        System.out.println("Hello");
    }
}
  1. 在resource目录下新建spring.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<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">
    <bean id="student" class="cn.bytecollege.bean.Student"></bean>
</beans>
  1. 新建测试类
package cn.bytecollege.test;

import cn.bytecollege.bean.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        Student student = (Student) context.getBean("student");
        student.sayHello();
    }
}

运行测试类,可以看出成功调用了student对象的sayHello方法,也就是说,成功从Spring容器中获取了在Spring配置文件中配置的JavaBean。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接