简单聊一聊Spring boot

什么是SpringBoot

Spring Boot 是由 Pivotal 团队提供的一个在Spring的基础上面搭设的框架,目的是为了简化Spring项目的搭设和开发过程。
spring boot并不是一个全新的框架,它不是spring解决方案的一个替代品,而是spring的一个封装。所以spring可以做的事情,用spring boot都可以做。
Spring Boot 去除了大量的 xml 配置文件,简化了复杂的依赖管理,配合各种 starter 使用,基本上可以做到自动化配置。Spring 可以做的事情,现在用 Spring boot 都可以做。

为什么用SpringBoot

以前在写spring项目的时候,要配置各种xml文件。

例如:

1 ,当我们使用Spring MVC时,我们需要配置组件扫描(component scan),dispatcher servlet,视图解析器(View Resolver),Web jar(用于提供静态内容)等。

2,当我们使用Hibernate/JPA时,我们需要配置数据源(datasource),实体管理器工厂(entity manager factory),事务管理器(transaction manager)等众多其他事物。

随着spring3,spring4的相继推出,约定大于配置逐渐成为了开发者的共识,大家也渐渐的从写xml转为写各种注解,在spring4的项目里,你甚至可以一行xml都不写。

但是,虽然spring4已经可以做到无xml,但写一个大项目需要很多很多的jar包,maven配置要写几百行,也是一件很可怕的事。

并且,现在快速开发一个网站的平台层出不穷,nodejs,php等,并且脚本语言渐渐流行了起来(Node JS,Ruby,Groovy,Scala等),就显得spring的开发模式越来越显得笨重。

所以,在这种环境下spring boot伴随着spring4一起出现了。

用SpringBoot可以做什么

现在流行微服务与分布式系统,springboot就是一个非常好的微服务开发框架,你可以使用它快速的搭建起一个系统。同时,你也可以使用spring cloud(Spring Cloud是一个基于Spring Boot实现的云应用开发工具)来搭建一个分布式的网站。

怎么用SpringBoot

第一步:搭建一个SpringBoot 应用

搭建springboot应用方式有很多,可以通过官网提供的spring initializr  或者各种ide提供的方式或者maven/gradle等;这里我们介绍一下用spring initializr 创建一个springboot应用;

1,打开浏览器,输入网址 http://start.spring.io/ ,如图所示: 

 2,按照顺序输入我们的项目信息,并选择要用的stater

 3,选择完之后,按《GENERATECTRL + ⏎》下载代码 ,我们就创建完成了一个简单的springboot项目。 

第二步:使用

         将我们创建好的springboot项目,导入到ide里面,就可以开始根据业务进行愉快的开发了。目录结构如下:

核心注解@SpringBootApplication

@SpringBootApplication : 是Sprnig Boot项目的核心注解,目的是开启自动配置;它是一个组合注解,由(@ComponentScan,@SpringBootConfiguration,@EnableAutoConfiguration)组成,他们各自的作用如下:
一,@ComponentScan
@ComponentScan告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。
使用过spring框架的小伙伴都知道,spring里有四大注解:@Service,@Repository,@Component,@Controller用来定义一个bean.@ComponentScan注解就是用来自动扫描被这些注解标识的类,最终生成ioc容器里的bean.
可以通过设置@ComponentScan basePackages,includeFilters,excludeFilters属性来动态确定自动扫描范围,默认扫描所有类型,并且扫描范围是@ComponentScan注解所在配置类包及子包的类

因此SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。

 @ComponentScan的参数

excludeFilters:指定不适合组件扫描的类型。
includeFilters:指定哪些类型有资格用于组件扫描。
lazyInit:指定是否应注册扫描的beans为lazy初始化。

二,@SpringBootConfiguration

1,@SpringBootConfiguration继承自@Configuration,二者功能也一致,都是用来声明当前类是一个配置类;
2,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。

三,@EnableAutoConfiguration

@EnableAutoConfiguration是springboot实现自动化配置的核心注解,通过这个注解把spring应用所需的bean注入容器中.@EnableAutoConfiguration源码通过@Import注入了一个ImportSelector的实现类
AutoConfigurationImportSelector,这个ImportSelector最终实现根据我们的配置,动态加载所需的bean.
简单概括就是,借助@Import的支持,收集和注册特定场景相关的bean定义。

如何运行并访问一个SpringBoot  Application

1,通常启动一个springboot只需要把它打包成一个jar,然后执行java -jar xxx.jar,打印如下内容,即代表启动成功;

 2,默认情况下,启动后在浏览器输入localhost:8080即可访问index.html页面,当然这些我们都可以通过配置进行指定。

Spring Boot 项目在启动后,首先去静态资源路径(resources/static)下查找 index.html 作为首页文件。

如果在静态资源路径(resources/static)下找不到 index.html,则会到 resources/templates 目录下找 index.html作为首页文件。

假设我们在 resources/templates 目录下有个 login.html 文件(使用 Thymeleaf 模版),想让它作为首页。

一种方式通过自定义一个 Controller 来实现,在 Controller 中返回逻辑视图名即可;

@Controller

public class HelloController {
     @RequestMapping("/")
     public String hello(){
         return "login";
     }
}

另一种方式是通过自定义一个WebMvcConfig并重写 addViewControllers 方法进行映射关系配置即可。

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("login");
    }
}

SpringApplication执行流程

我们的启动类的 main 方法中只有一句:

SpringApplication.run(VrmeetingWebApplication.class, args);
所以SpringApplication的run方法的实现是我们的主要线路,该方法的主要流程可以归纳如下:

 

  Spring Boot的优缺点

 1,优点

    1)独立运行的 Spring 项目。Spring Boot 可以以 jar 包的形式独立运行,运行一个 Spring Boot 项目只需通过 java–jar xx.jar 来运行。
    2)内嵌 Servlet 容器。Spring Boot 可选择内嵌 Tomcat、Jetty 或者 Undertow,这样我们无须以 war 包形式部署项目。
    3)提供 starter 简化 Maven 配置。Spring 提供了一系列的 starter pom 来简化 Maven 的依赖加载;
                    例如,当你使用了spring-boot-starter-web 时,会自动加入WEB所有的依赖包。
    4)自动配置 Spring/Spring Boot 会根据在类路径中的 jar 包、类,为 jar 包里的类自动配置 Bean,这样会极大地减少我们要使用的配置。
    5)准生产的应用监控。Spring Boot 提供基于 http、ssh、telnet 对运行时的项目进行监控。
    6)无代码生成和 xml 配置。Spring Boot 的神奇的不是借助于代码生成来实现的,而是通过条件注解来实现的,这是 Spring 4.x 提供的新特性。Spring 4.x 提倡使用 Java 配置和注解配置组合,而 Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。
    7)极大的简化了开发和部署效率。
    8)..............

2,缺点   

    1)版本迭代速度很快,一些模块改动很大。
    2)由于不用自己做配置,报错时很难定位。
    3)网上现成的解决方案比较少

Starter是什么

starter是一组方便的依赖关系描述符,你可以在应用程序中包含这些描述符。可以获得所需的所有Spring和相关技术的一站式服务,而无需搜索示例代码并复制粘贴依赖。

例如要开发一个Web应用程序或者一个restful服务系统,Spring Boot Start Web是首选。

我们只需要添加starter-web依赖

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

</dependency>

springboot 会自动为我们加载以下依赖

  Spring Boot Starter Web预先依赖了这些。我不需要自己关心这些依赖项或它们的兼容版本。

Spring Boot Starter有哪些常用的典型的选项

  • spring-boot-starter-security:使用Spring Security进行身份验证和授权
  • spring-boot-starter-web-services:SOAP Web服务
  • spring-boot-starter-jdbc:传统的JDBC
  • spring-boot-starter-log4j2:使用Log4j2进行日志记录
  • spring-boot-starter-amqp:通过spring-rabbit来支持AMQP协议(Advanced Message Queuing Protocol. 。
  • spring-boot-starter-data-elasticsearch : 支持ElasticSearch搜索和分析引擎,包括spring-data-elasticsearch。
  • spring-boot-starter-redis : 支持Redis键值存储数据库,包括spring-redis。
  • .............

Spring/SpringMVC/SpringBoot/springCloud的区别

1. spring是一个一站式的轻量级的java开发容器框架,核心是IOC和AOP,针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;

2. springMvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分;

3.相对于springMvc框架,springBoot更专注于开发微服务后台接口,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml。

   相对springmvc,springBoot大大简化了配置流程,能快速开发单个微服务;

4. spring cloud大部分的功能插件都是基于springBoot去实现的,springCloud关注于全局的微服务整合和管理,将多个springBoot单体微服务进行整合以及管理; 

    springCloud依赖于springBoot开发,而springBoot可以独立开发;

总结:

1. Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等。但他们的基础都是Spring的ioc、aop等.

    IOC提供了依赖注入的容器, AOP解决了面向横切面编程,然后在此两者的基础上实现了其他延伸产品的高级功能;

2. springMvc主要解决WEB开发的问题,是基于Servlet 的一个MVC框架,通过XML配置,统一开发前端视图和后端逻辑;

3. 由于Spring的配置非常复杂,各种XML、JavaConfig、servlet处理起来比较繁琐,为了简化开发者的使用,从而创造性地推出了springBoot框架,默认优于配置,简化了springMvc的配置流程;

     但区别于springMvc的是,springBoot专注于单体微服务接口开发,和前端解耦,虽然springBoot也可以做成springMvc前后台一起开发,但是这就有点不符合springBoot框架的初衷了;

4. 对于springCloud框架来说,它和springBoot一样,注重的是微服务的开发,但是springCloud更关注的是全局微服务接口的整合和管理,相当于管理多个springBoot框架的单体微服务;

 

posted @ 2021-06-03 11:29  wxw_wang  阅读(180)  评论(0编辑  收藏  举报
/* 下雪 begin */ /* 下雪 end */ /* 点击出现爱心特效 begin*/ /* 点击出现爱心特效 end*/