您当前的位置: 首页 >  spring

一一哥Sun

暂无认证

  • 6浏览

    0关注

    622博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Day06_01_SpringBoot教程之SpringBoot简介

一一哥Sun 发布时间:2019-05-29 15:57:14 ,浏览量:6

SpringBoot简介

一. Spring框架起源

Spring在未产生之前,是EJB大行其道的时代,EJB简而言之是一个重量级框架.Rod Johnson在2002年编著的《Expert one on one J2EE design and development》一书中批判了那个时候Java EE 系统框架,说其臃肿、低效、脱离现实,同年推出了《Expert one-on-one J2EE Development without EJB》,对EJB的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之,堪称经典.2003年起,由《Expert one on one J2EE design and development》中阐述的部分理念和原型衍生而来的一个轻量级Java开发框架--Spring便兴起;其目的就是为了简化JavaEE的企业级应用开发,并由此经过多次版本更迭.

二. Spring的发展史

Spring框架为开发Java应用程序提供了全面的基础架构支持,它包含一些很好用的功能,如依赖注入和开箱即用的模块,如:Spring JDBC、Spring MVC、Spring Security、Spring AOP 、Spring ORM 、Spring Test 这些模块缩短应用程序的开发时间,提高了应用开发的效率.

1. Spring1.x 时代

功能点:

1.x时代的Spring把所有的功能都集中在一个项目中,其中包含了核心的IoC、AOP,同时也包含了其他的诸多功能,例如:JDBC、Mail、ORM、事务、定时任务、Spring MVC等.

优点:

支持基于XML的配置; 支持依赖注入与声明式事务,使得组件之间再也不存在紧耦合,再也用不到重量级的EJB框架了.

缺点:

只支持基于XML的配置,而且通过xml文件来配置bean,当项目不断扩大的时候,需要将xml配置信息分放到不同的配置文件中,因此需要频繁的在java类和xml配置文件中切换.

2. Spring2.x 时代

特点

注解与xml共存: 应用程序的基本配置用xml,比如数据源、资源文件等;业务代码的开发用注解,比如Service中注入bean等.

优点

随着 JDK 1.5带来的注解支持,Spring 2.x也增加了对注解的支持,因此可以使用注解对Bean进行声明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发.

3. Spring3.x 时代

特点

从Spring3.x开始提供了基于Java类的配置方式,如@Configuration 和 @Bean的出现.@Configuration 作用于类上,相当于一个xml配置文件;@Bean 作用于方法上,相当于xml配置中的.至此注解慢慢的取代了xml配置.

优点

使用Java配置方式可以更好的理解你配置的Bean.现在我们仍然处于这个时代,并且Spring4.x和Spring boot都推荐使用java配置的方式.

4. Spring4.x 时代

特点

Spring 4.x全面支持JDK 8.0,支持Lambda表达式的使用,提供了对@Scheduled和@PropertySource重复注解的支持,提供了空指针终结者Optional,对核心容器进行增加:支持泛型的依赖注入、Map的依赖注入、Lazy延迟依赖的注入、List注入、Condition条件注解注入、对CGLib动态代理类进行了增强.

Spring 4.x还支持了基于Groovy DSL的配置,提高Bean配置的灵活性.

Spring 4.x开始,Spring MVC基于Servlet 3.0 开发,并且为了方便Restful开发,引入了新的RestController注解器注解,同时还增加了一个AsyncRestTemplate支持Rest客户端的异步无阻塞请求.

一张图概括:

5. Spring 5.x 时代

Spring 5.x主要新特性:

三. Spring生态概述

Spring发展到今天,旗下拥有诸多的子项目,从最基本的Spring IoC/AOP使用,到安全管理,再到大数据,Spring已经逐渐渗入到各个领域.目前几乎所有JavaWeb相关的开发都可以在Spring中找到合适的方案,为了防止在开发的时候重复造轮子,下边梳理一下Spring的各个子项目,做到心中有数.

四. SpringBoot 概述 1. Spring Boot的产生

随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java 的开发显得格外的笨重:繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大.

在上述环境下,Spring Boot 应运而生. 它使用“约定优于配置”的理念让你的项目快速的运行起来.使用 Spring Boot 很容易创建一个独立运行(运行 Jar,内嵌 Servlet 容器)的准生产级别的基于 Spring 框架的项目.使用 Spring Boot 你可以不用或者只需很少的 Spring 配置便可以快速实现Web开发.

2. Spring Boot简介

Spring 团队在现有Spring框架的基础上发布了一个新的框架---Spring Boot,该框架是由Spring Pivotal 团队提供的全新框架.其设计目的是用来简化新 Spring 应用的初始搭建配置以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.Spring Boot采用约定优于配置的方式,大量的减少了配置文件的使用.

3. 约定优于配置

约定优于配置(Convention Over Configuration),也称作按约定编程,这是一种软件设计范式.目的在于减少软件开发人员所需要做出的决定数量,从而获得简单的好处,而又不失去其中的灵活性,开发人员仅仅需要规定应用中不符合约定的部分.例如,如果模型中有个名为Sale的类,数据库中对应的表就会默认命名为sales.只有在偏离这一约定的时候,比如将该表命名为"products_sold",才会需要写有关这个名字的配置.如果所用工具的约定与你的期待相符,便可省去配置;反之,你可以配置来达到你所期待的方式.

比如平时架构师搭建项目就是限制软件开发随便写代码,制定出一套规范,让开发人员按统一的要求进行开发编码测试之类的,这样就加强了开发效率与审查代码效率.所以说写代码的时候就需要按要求命名,这样统一规范的代码就有良好的可读性与维护性了.

补充: 约定优于配置也被称为习惯优于配置、约定大于配置.

五. Spring Boot 优缺点

1. Spring Boot的主要特点
  • 创建独立的Spring应用程序;
  • 直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件);
  • 提供“初始”的POM文件内容,以简化Maven配置;
  • 尽可能自动配置Spring;
  • 提供生产就绪的功能,如指标,健康检查和外部化配置;
  • 绝对无代码生成,也不需要XML配置.
2. 优点
  • 快速构建项目,缩短开发时间;
  • 对主流开发框架的无配置集成;
  • 易于理解和开发Spring应用;
  • 项目可独立运行,无需依赖外部的 Servlet 容器;
  • 提供运行时的应用监控;
  • 极大地提高了开发、部署效率;
  • 与云计算的天然集成.
3. 缺点
  • 版本迭代速度很快,一些模块改动很大;
  • 由于不用自己做配置,报错时很难定位;
  • 网上现成的解决方案比较少.
六. Spring Boot原理(重点) 1. 原理概述

Spring boot应用程序采用各种Starters启动器,入口是包含@SpringBootApplication注解和main方法的类,然后使用@ComponentScan注解自动扫描项目中的所有组件,并且Spring Boot会根据@EnableAutoConfiguration注解将项目中的依赖项自动配置到应用程序.例如,如果MySQL数据库在类路径上,但尚未配置任何数据库连接,则Spring Boot会自动配置内存数据库.

2. 具体原理实现

2.1 Spring Boot Starters

处理依赖管理对于大项目来说是一项艰巨的任务,Spring Boot通过提供一组依赖项来解决此问题,以方便开发人员. 例如,如果要使用Spring和JPA进行数据库访问,则在项目中包含spring-boot-starter-data-jpa依赖项就足够了.

请注意,所有Spring Boot启动程序都遵循相同的命名模式spring-boot-starter-*,其中*表示它是某种应用程序.

请看下面的这些Spring Boot启动器,以便更好地理解. 

Spring Boot Starter Web依赖项用于编写web程序,其代码如下所示 -


org.springframework.boot
spring-boot-starter-web

Spring Boot Starter ThymeLeaf依赖项用于创建Web模板界面,其代码如下所示 -


org.springframework.boot
spring-boot-starter-thymeleaf

Spring Boot Starter Test依赖项用于编写测试用例,其代码如下所示 -


org.springframework.boot
spring-boot-starter-test

2.2 Spring Boot应用程序入口类

Spring Boot应用程序的入口点是包含@SpringBootApplication注解的类,该类中包含运行Spring Boot应用程序的main方法.@SpringBootApplication注解包括自动配置,组件扫描和Spring Boot配置. 如果将@SpringBootApplication注解添加到类中,则无需添加@EnableAutoConfiguration,@ComponentScan和@SpringBootConfiguration注解.@SpringBootApplication注解包括其他所有的注解.

请注意以下代码以便更好地理解 -

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

2.3 自动配置

Spring Boot Auto Configuration会根据在项目中添加的JAR依赖项自动配置Spring应用程序.例如,如果MySQL数据库在类路径上,但尚未配置任何数据库连接,则Spring Boot会自动配置内存数据库. 为此,需要将@EnableAutoConfiguration注解或@SpringBootApplication注解添加到主类文件中,然后就可以自动配置Spring Boot应用程序.

请注意以下代码以便更好地理解 -

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

@EnableAutoConfiguration
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

2.4 组件扫描

Spring Boot应用程序在应用程序初始化时扫描所有的bean和包声明,需要为类文件添加@ComponentScan注解,以扫描项目中添加的组件.

请注意以下代码以便更好地理解 -

import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

 

关注
打赏
1665624836
查看更多评论
立即登录/注册

微信扫码登录

0.0604s