spring 框架

217 阅读8分钟

我正在参加「掘金·启航计划」

框架

什么是框架:

框架,即framework。其实就是某种企业级应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。

框架是对特定应用领域中的应用系统的部分设计和实现的整体结构。

因为软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事务处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。

框架的作用:

  1. 提高开发效率。
  2. 增强可重用性:不重复造轮子。
  3. 节约维护成本。
  4. 提供编写规范:良好代码质量。
  5. 解耦底层实现原理:降低了开发难度。
  6. 生产力工具:中小企业要生存,我们程序员要吃饭。

学好框架的必要性:

Spring(包括springmvc)和mybatis是企业开发中最基础的两个框架。

从企业角度分析,在实际开发中通常都会采用成熟的框架作为项目某个技术的解决方案,而掌握这些基础框架已经是企业对开发人员的最基本技能要求。

从自身角度分析,我们通过前面对mybatis框架的学习和使用,在实现持久层操作时代码变得精简的同时,开发时间得到了大大的缩短。

==框架学习三要素: ==

  • 导包
  • 配置文件
  • 核心API

缺陷:避免大炮打蚊子

一、Spring简介

官网地址:spring.io

image-20200112100733591.png

Spring focuses on the "plumbing" of enterprise applications so that teams can focus on application-level business logic, without unnecessary ties to specific deployment environments.

Spring是实际意义上的Java编程语言中的行业标准,不学他别说找工作,你甚至不能说学过Java。

Spring是一个开源框架

==Spring框架使得企业软件开发变得更加简单。 ==

==Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的对象容器框架。 ==

本质:可以理解为项目中,对象的管家。Spring就是一个对象的容器(盒子,瓶子)。web容器

在Spring之前,企业级软件开发主要由EJB(Enterprise Java Bean)来完成,但是随着时间流逝EJB逐步被淘汰了,因为它太过于复杂,开发成本过高。替代EJB并提供非常多的Java企业应用功能。

从简单性、松耦合角度、可测试性角度来说,绝大部分Java语言写的应用都可从Spring中受益:

小结:

◆ 设计目的:解决企业应用开发的复杂性

◆ 功能核心:一个控制反转(IoC)和面向切面(AOP)的对象容器。

◆ 使用范围:任何Java应用均可使用Spring

1.1 发展历程

历史沿革:

  • 1997年,IBM提出了EJB(enterprise java bean咖啡豆)的思想

  • 1998年,SUN制定开发标准规范EJB1.0

  • 1999年,EJB1.1发布--企业应用开发萌芽

  • 2001年,EJB2.0发布

  • 2003年,EJB2.1发布

  • 2006年,EJB3.0发布--企业应用生态诞生--蓬勃发展

  • Rod Johnson(Spring之父)

    • Expert One-to-One J2EE Design and Development(2002) 阐述了J2EE使用EJB开发设计的优点及解决方案 Expert One-to-One J2EE Development without EJB(2004) 阐述了J2EE开发不使用EJB的解决方式(Spring雏形)
  • 2017年9月份发布了spring的最新版本spring 5.0通用版(GA)==>微服务阶段

起源:

要谈Spring的历史,就要先谈J2EE。J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是在实践中并没有获得绝对的成功,因为开发效率,开发难度和实际的性能都令人失望。

曾经使用过EJB开发Java企业级应用的人都知道,学习EJB和应用非常艰苦。EJB要严格地实现各种不同类型的接口,类似的或者重复的代码大量存在。而配置也是复杂和单调。因为学习EJB的高昂代价,和极低的开发效率,极高的资源消耗,都造成了EJB的使用困难,所以Spring框架出现了。而Spring出现的初衷就是为了解决类似的这些问题,使Java企业级应用开发更加容易。

Spring的形成,最初来自Rod Jahnson所著的一本很有影响力的书籍《Expert One-on-One J2EE Design and Development》,就是在这本书中第一次出现了Spring的一些核心思想,该书出版于2002年。另外一本书《Expert One-on-One J2EE Development without EJB》,更进一步阐述了在不使用EJB开发JAVA EE企业级应用的一些设计思想和具体的做法。

热心提示:别去看EJB!那玩意儿现在根本没人用!!!

1.2 优点

  1. 简化企业级应用开发: 使企业级应用开发变得更简单: 主要是解耦!
通过Spring提供的IoC容器,可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用
  1. 简化类间关系: 我们面向接口编程,使用接口而不是使用类,大大简化了类与类之间的关系(解耦)
  2. 简化传统配置: 提供了一种企业应用程序配置的最好方法
  3. 简化事务: 超级简单的事务支持@Transactional
  4. 简化测试: 使得应用程序更容易测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。
  1. 简化其他框架: 不仅让自己简化,还能简化其他框架,这就是其强大的整合能力,非常的方便集成各种优秀框架;这是其设计理念之一,不与参与任何框架竞争!做框架与框架之间的胶水
Spring可以降低各种框架的使用难度,提供了对各种优秀框架(SpringMVC、Mybatis、Struts等)的直接支持。

1.3 主要模块

1571323854386.png

  1. 持久层数据访问:Jdbc,对象关系映射ORM,事务,OXM,JMS...
  2. Web层:SpringMVC,Servlet,Portlet,WebSocket..
  3. 核心容器:Beans,Core,Context,SpEL
  4. 测试
  5. 其他

注意:Spring是一个模块化的框架,Spring功能很多很强大,内容太多,但是并不要求所有的功能我们都得用上,我们使用什么模块什么功能引入对应模块即可。

二、Spring入门案例

注意:我们使用的是Spring框架的5.0.7.RELEASE版本,要求JDK必须是8及以上,tomcat版本是8.5及以上。

2.1 目标:

Spring的入门案例,搭建Spring框架环境,使用Spring的容器来创建对象Account

解析:

Spring配置文件,参考官方开发文档。docs.spring.io/spring/docs…

Spring容器创建对象,使用的也同样是默认构造,类中不写不行,但默认类一般都含有空参数构造!

核心的api,ApplicationContext(对象的容器)

2.2 实现步骤:

  1. 创建Maven工程,导入依赖坐标

  2. 创建Account实体类

  3. 创建beans.xml配置文件,配置配置文件,参考官方文档

    • 通过配置创建对象,同样使用的是构造方法创建
    • 设置属性值
  4. 编写测试类

    1. 加载xml配置文件,创建Spring的ioc容器
    2. 获取容器中的accountService对象

2.3 实现过程:

  1. 创建Maven工程,导入依赖坐标

image-20200113065833925.png

  <dependencies>
      <!--spring 的ioc容器jar包-->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.2.7.RELEASE</version>
      </dependency>
      <!--单元测试-->
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
      </dependency>
  </dependencies>
  1. 创建Account实体类

    public class Account {
        private Integer id;
        private String name;//用户名称
        private Double money;//账户金额
        //getter setter toString...省略
    }
    
  2. 创建applicationContext.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属性:设置对象在容器中的唯一标识
        class属性:设置对象的全限定名称,用于反射创建对象
        -->
        <bean id="account" class="com.itheima.pojo.Account">
            <!--
            property标签作用:为创建的对象赋值,前提条件对象中必须有该变量setter方法
            name属性:设置成员变量的名称
            value属性:设置成员变量赋的值
            -->
            <property name="id" value="1"/>
            <property name="name" value="特朗普"/>
            <property name="money" value="50000000"/>
        </bean>
    </beans>
    
  3. 编写测试类

    • 加载xml配置文件,创建Spring的ioc容器
    • 获取容器中的accountService对象
    public class HelloWorldTest {
        @Test
        public void test(){
            //通过配置文件来初始化Spring的核心容器
            ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
            //从容器中获取Account对象
            Account account = (Account) ioc.getBean("account");
            System.out.println(account);
        }
    }
    

2.4 小结:

  1. 创建对象始终是Java编程的核心,这里使用的是bean标签来创建:new,反射(Class.forName("全限定类名")),bean标签,BeanFactory对象工厂,构建者设计模式(SqlSessionFactoryBuilder)
  2. 对象创建使用的是默认构造,这里不写不行
  3. Spring的核心容器ApplicationContext
  4. 最关键的是applicationContext.xml,可以随意命名,从今天开始,将伴随你开发的始终