Spring学习

1、Spring简介

  • Spring是什么
  • Spring是分层的Java SE/EE应用full-stack轻量级开源框架,是以loC(Inverse Of Contorl:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核。
  • Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力。
  • Spring 由 Rod Johnson 创立,2004 年发布了 Spring 框架的第一版,其目的是用于简化企业级应用程序开发的难度和周期。
  • 在 Spring 中,认为一切 Java 类都是资源,而资源都是类的实例对象(Bean),容纳并管理这些 Bean 的是 Spring 所提供的 IoC 容器,所以 Spring 是一种基于 Bean 的编程,它深刻地改变着 Java 开发世界,使用基本的 JavaBean 来完成以前只有 EJB 才能完成的工作,使得很多复杂的代码变得优雅和简洁,避免了 EJB 臃肿、低效的开发模式,极大的方便项目的后期维护、升级和扩展。迅速地取代 EJB 成为了实际的开发标准。
  • 在实际开发中,服务器端通常采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao)。
  • Spring 致力于 Java EE 应用各层的解决方案,对每一层都提供了技术支持。在表现层提供了与 Spring MVC、Struts2 框架的整合,在业务逻辑层可以管理事务和记录日志等,在持久层可以整合 MyBatis、Hibernate 和 JdbcTemplate 等技术。这就充分体现出 Spring 是一个全面的解决方案,对于已经有较好解决方案的领域,Spring 绝不做重复的事情。
  • Spring框架优势
    1)方便解耦,简化开发
    Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
    2)方便集成各种优秀框架
    Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
    3)降低 Java EE API 的使用难度
    Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。
    4)方便程序的测试
    Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
    5)AOP 编程的支持
    Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
    6)声明式事务的支持
    只需要通过配置就可以完成对事务的管理,而无须手动编程。
  • Spring体系结构
    Spring框架采用分层的理念,根据功能的不同可划分为以下几个模块:Data Access/Integration(数据访问与集成)、Web、AOP、Aspects、Instrumentation(检测)、Messaging(消息处理)、Core Container(核心容器)和 Test。
    具体如下图所示:
  • springblade的使用_java

  • 各模块的详细介绍
    1、Data Access/Integration(数据访问/集成)
    数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。
    JDBC 模块:提供了一个 JBDC 的样例模板,使用这些模板能消除传统冗长的 JDBC 编码还有必须的事务控制,而且能享受到 Spring 管理事务的好处。
    ORM 模块:提供与流行的“对象-关系”映射框架无缝集成的 API,包括 JPA、JDO、Hibernate 和 MyBatis 等。而且还可以使用 Spring 事务管理,无需额外控制事务。
    OXM 模块:提供了一个支持 Object /XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。将 Java 对象映射成 XML 数据,或者将XML 数据映射成 Java 对象。
    JMS 模块:指 Java 消息服务,提供一套 “消息生产者、消息消费者”模板用于更加简单的使用 JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
    Transactions 事务模块:支持编程和声明式事务管理。
    2、Web模块
    Spring 的 Web 层包括 Web、Servlet、WebSocket 和 Portlet 组件,具体介绍如下。
    Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IOC 容器初始化以及 Web 应用上下文。
    Servlet 模块:提供了一个 Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的 JSP 标签,完全无缝与 Spring 其他技术协作。
    WebSocket 模块:提供了简单的接口,用户只要实现响应的接口就可以快速的搭建 WebSocket Server,从而实现双向通讯。
    Portlet 模块:提供了在 Portlet 环境中使用 MVC 实现,类似 Web-Servlet 模块的功能。
    3、Core Container(Spring的核心容器)
    Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成,没有这些核心容器,也不可能有 AOP、Web 等上层的功能。具体介绍如下。
    Beans 模块:提供了框架的基础部分,包括控制反转和依赖注入。
    Core 核心模块:封装了 Spring 框架的底层部分,包括资源访问、类型转换及一些常用工具类。
    Context 上下文模块:建立在 Core 和 Beans 模块的基础之上,集成 Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等。ApplicationContext 接口是上下文模块的焦点。
    SpEL 模块:提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从 Spring 容器获取 Bean,它也支持列表投影、选择和一般的列表聚合等。
    4、AOP、Aspects、Instrumentation和Messaging
    在 Core Container 之上是 AOP、Aspects 等模块,具体介绍如下:
    AOP 模块:提供了面向切面编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中,这样各司其职,降低业务逻辑和通用功能的耦合。
    Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
    Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
    messaging 模块:Spring 4.0 以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。
    5、Test模块
    Test 模块:Spring 支持 Junit 和 TestNG 测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。

Spring开发环境的搭建

在搭建Spring开发环境之前需要安装JDK、Tomcat和Eclipse

安装JDK

安装Eclipse

下载Apache Common Logging API

Common Logging是使用Spring的必要组件

Apache Common Logging API 下载地址:https://commons.apache.org/proper/commons-logging/download_logging.cgi

springblade的使用_java-ee_02

下载完成后,将压缩包解压到相应位置。该文件包含以下 jar 文件和其它支持文档,目录结构如下。

springblade的使用_java_03

Spring下载

下载地址:https://repo.spring.io/ui/native/libs-release-local/ 进入该网址,然后依次按照org-springframework-spring往下找,下载对应的版本

springblade的使用_springblade的使用_04


springblade的使用_Java_05

目录结构介绍如下:

springblade的使用_springblade的使用_06

docs:Spring的API文档和开发规范
libs:开发需要的jar包和源码包
schema:开发所需要的schema文件,这些文件中定义了Spring相关配置文件的约束
其中在 libs 目录中,包含了 Spring 框架提供的所有 jar 文件,其中有 4 个 jar 文件是 Spring 框架的基础包,分别对应 Spring 容器的四个模块,具体如下表所示

名称

作用

spring-core-x.x.xx.RELEASE.jar

包含 Spring 框架基本的核心工具类,Spring 其他组件都要用到这个包中的类,是其他组件的基本核心。

spring-beans-x.x.xx.RELEASE.jar

所有应用都要用到的,它包含访问配置文件、创建和管理 Bean 以及进行 Inversion of Control(IoC)或者 Dependency Injection(DI)操作相关的所有类。

spring-context-x.x.xx.RELEASE.jar

Spring 提供在基础 IoC 功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI 定位、EJB 集成、远程访问、缓存以及各种视图层框架的封装等

spring-expression-x.x.xx.RELEASE.jar

定义了 Spring 的表达式语言。

需要注意的是,在使用 Spring 开发时,除了 Spring 自带的 JAR 包以外,还需要一个第三方 JAR 包

commons.logging

处理日志信息

使用 Spring 框架时,只需将 Spring 的 4 个基础包以及 commons-logging-1.2.jar 包复制到项目的 lib 目录,并发布到类路径中即可。

创建Java项目

springblade的使用_springblade的使用_07


添加Spring和logging的jar包。右击项目->Build Path -> Add external archives->选择将上面下载的jar包导入。

springblade的使用_Java_08

示例程序

目录

springblade的使用_spring_09

SpringDemoMain 文件

package cn.demo;

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

public class SpringDemoMain {
	 public static void main(String[] args) {
	        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
	        SpringDemoEntity obj = (SpringDemoEntity) context.getBean("demo");
	        obj.getMes();
	    }
}

Beans.xml文件(放在src目录下)

<?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-3.0.xsd">

    <bean id="demo" class="cn.demo.SpringDemoEntity">
        <property name="mes" value="Hello Spring" />
    </bean>

</beans>

SpringDemoEntity文件

package cn.demo;

public class SpringDemoEntity {
	private String mes;
    public void setMes(String mes) {
        this.mes = mes;
    }
    public void getMes() {
        System.out.println("mes : " + mes);
    }
}