Spring学习笔记(一)-spring概述及下载

Spring学习笔记(一)-spring概述及下载

    • 一、概述
    • 二、三层架构
    • 三、Spring 框架的主要优点
    • 四、Spring的体系结构
    • 五、Spring的下载和配置
    • 六、测试Spring

Spring学习笔记(一)-spring概述及下载_第1张图片

一、概述

  Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于JEE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
  Spring 是分层的 Java SE/EE full-stack 轻量级开源框架,以 IoC(Inverse of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)为内核,使用基本的 JavaBean 完成以前只可能由 EJB 完成的工作,取代了 EJB 臃肿和低效的开发模式。
  在实际开发中,通常服务器端采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao)。

spring优良特性:

  • 非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API

  • 控制反转:IOC——Inversion of Control,指的是将对象的创建权交给 Spring 去创建。使用 Spring 之前,对象的创建都是由我们自己在代码中new创建。而使用 Spring 之后。对象的创建都是给了 Spring 框架。

  • 依赖注入:DI——Dependency Injection,是指依赖的对象不需要手动调用 setXX 方法去设置,而是通过配置赋值。

  • 面向切面编程:Aspect Oriented Programming——AOP。

  • 容器:Spring 是一个容器,因为它包含并且管理应用对象的生命周期
    组件化:Spring 实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。

  • 一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上 Spring 自身也提供了表述层的 SpringMVC 和持久层的 Spring JDBC)

二、三层架构

  • 表现层 web层 MVC是表现层的一个设计模型
  • 业务层 service层
  • 持久层 dao层

三、Spring 框架的主要优点

1. 方便解耦,简化开发

  通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

2. AOP编程的支持

  通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

3.声明式事务的支持

  在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

4. 方便程序的测试

  可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。

5.方便集成各种优秀框架

  Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。

6.降低Java EE API的使用难度

  Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。

7.Java 源码是经典学习范例

  Spring的源码设计精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。

四、Spring的体系结构

Spring学习笔记(一)-spring概述及下载_第2张图片
核心容器

  核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring 表达式语言,Spring Expression Language)等模块组成,它们的细节如下:

  • spring-core 模块提供了框架的基本组成部分,包括 IoC 和依赖注入功能。

  • spring-beans 模块提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。

  • context 模块建立在由 core和 beans 模块的基础上建立起来的,它以一种类似于 JNDI 注册的方式访问对象。Context 模块继承自 Bean 模块,并且添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过 Servelet 容器)等功能。Context 模块也支持 Java EE 的功能,比如 EJB、JMX 和远程调用等。ApplicationContext 接口是 Context 模块的焦点。spring-context-support 提供了对第三方集成到 Spring 上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。

  • spring-expression 模块提供了强大的表达式语言,用于在运行时查询和操作对象图。它是 JSP2.1 规范中定义的统一表达式语言的扩展,支持 set 和 get 属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从 Spring IoC 容器检索对象,还支持列表的投影、选择以及聚合等。

它们的完整依赖关系如下图所示:
Spring学习笔记(一)-spring概述及下载_第3张图片
数据访问/集成

  数据访问/集成层包括 JDBC,ORM,OXM,JMS 和事务处理模块,它们的细节如下(注:JDBC=Java Data Base Connectivity,ORM=Object Relational Mapping,OXM=Object XML Mapping,JMS=Java Message Service):

  • JDBC 模块提供了 JDBC 抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。

  • ORM 模块提供了对流行的对象关系映射 API 的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 spring的其它功能整合,比如前面提及的事务管理。

  • OXM 模块提供了对 OXM 实现的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等。

  • JMS 模块包含生产(produce)和消费(consume)消息的功能。从 Spring 4.1 开始,集成了 spring-messaging 模块。

  • 事务模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。(注:编程式事务需要自己写 beginTransaction()、commit()、rollback() 等事务管理方法,声明式事务是通过注解或配置由 spring 自动处理,编程式事务力度更细)

Web

Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下:

  • Web 模块提供面向 web 的基本功能和面向 web 的应用上下文,比如多部分(multipart)文件上传功能、使用 Servlet 监听器初始化 IoC 容器等。它还包括 HTTP 客户端以及 Spring 远程调用中与 web 相关的部分。

  • Web-MVC 模块为 web 应用提供了模型视图控制(MVC)和 REST Web服务的实现。Spring 的 MVC 框架可以使领域模型代码和 web 表单完全地分离,且可以与 Spring 框架的其它所有功能进行集成。

  • Web-Socket 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。

  • Web-Portlet 模块提供了用于 Portlet 环境的 MVC 实现,并反映了 spring-webmvc 模块的功能。

其他

还有其他一些重要的模块,像 AOP,Aspects,Instrumentation,Web 和测试模块,它们的细节如下:

  • AOP 模块提供了面向方面(切面)的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,从而使实现功能的代码彻底的解耦出来。使用源码级的元数据,可以用类似于.Net属性的方式合并行为信息到代码中。

  • Aspects 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。

  • Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。

  • Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。

  • 测试模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。

五、Spring的下载和配置

下面来讲一下Spring框架的下载和配置:

1.官网最新版详细下载步骤

访问spring官网:https://spring.io/
进入官网按下面图示箭头点击
Spring学习笔记(一)-spring概述及下载_第4张图片
Spring学习笔记(一)-spring概述及下载_第5张图片
Spring学习笔记(一)-spring概述及下载_第6张图片
上图为spring版本信息
当前最新版为 5.3.2
后面红色标注GA为稳定版 蓝色为测试版 我们下载最新版稳定版即可
Spring学习笔记(一)-spring概述及下载_第7张图片
点击后来到GitHub网页界面,然后拉到网页最下方,见下图:
Spring学习笔记(一)-spring概述及下载_第8张图片
点击链接后继续拉到网页下方:
Spring学习笔记(一)-spring概述及下载_第9张图片
点击链接:https://repo.spring.io/
点击链接后鼠标滑动至左侧浮动框第二项点击
Spring学习笔记(一)-spring概述及下载_第10张图片
Spring学习笔记(一)-spring概述及下载_第11张图片
Spring学习笔记(一)-spring概述及下载_第12张图片
下载spring的网址为:https://repo.spring.io/release/org/springframework/spring/
点击即可看到spring下载页面
Spring学习笔记(一)-spring概述及下载_第13张图片
最下方为最新版spring点击后看到下图界面
Spring学习笔记(一)-spring概述及下载_第14张图片点击即可下载

2.简单下载

下载链接:https://repo.spring.io/release/org/springframework/spring/
直接打开此链接进行下载

3.spring核心jar包
将下载的spring解压打开lib目录
Spring学习笔记(一)-spring概述及下载_第15张图片
spring的核心jar包有四个,推荐将其整理出来备用,见下图:
Spring学习笔记(一)-spring概述及下载_第16张图片

六、测试Spring

这里我用的工具为idea,下面我对spring框架写一个简单的测试
首先创建一个项目
项目列表新建一个文件夹lib用来存放jar包,将jar包添加到程序中

右击lib目录
Spring学习笔记(一)-spring概述及下载_第17张图片
将jar包添加进项目
Spring学习笔记(一)-spring概述及下载_第18张图片
项目结构如下图:
Spring学习笔记(一)-spring概述及下载_第19张图片
1.创建一个user类添加一个方法

package com.spring.entity;

public class User {
    //测试方法
    public void add(){
        System.out.println("add.....");
    }
}

2.用xml文件创建user类的对象
Spring学习笔记(一)-spring概述及下载_第20张图片
新建一个spring的xml配置文件文件,这里我已经写好了一个。


<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="user" class="com.spring.entity.User">bean>
beans>

用bean标签创建对象

  • id属性为唯一标识名
  • class属性为bean的全限定类名,指向classpath下类定义所在位置

3.写一个测试类用来测试

  • 用以下方法从xml文件中获取对象
package com.spring.test;

import com.spring.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSpring {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
        User user=context.getBean("user", User.class);
        System.out.println(user);
        user.add();

    }

}

运行结果为下图:
在这里插入图片描述
对象成功创建,而方法也调用成功。

  • 对象user是谁创建的呢? user对象是由spring创建的。

  • user对象的属性是怎么设置的? user对象的属性是由spring容器设置的

这个过程就叫控制反转 :

  • 控制 : 谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的

  • 反转 : 程序本身不创建对象 , 而变成被动的接收对象 .

ps:我也是刚刚学习spring框架,我就将自己学习到的知识在这里做了系统性的总结,希望能给大家带来帮助,也欢迎大家来纠正我的错误,共同进步!
后续我会不定时更新。

你可能感兴趣的:(spring,spring概述及下载,spring,java)