最详细的SpringBoot入门

SpringBoot是什么

SpringBoot是Spring家庭中的微型框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。

官方地址https://projects.spring.io/spring-boot/

参考文档:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

SpringBoot要解决的问题

随着Java语言的慢慢发展,Java的开发显得格外的笨重,繁多的配置,低下的开发效率,复杂的部署流程以及第三方技术集成难度非常大而且杂。

在上述环境中,SpringBoot营运而生,它使用“习惯由于配置”的理念让你的项目快速的运行起来,使用SpringBoot很容易创建一个独立运行。它内置Tomcat,Servlet,Spring等等基本开发的功能。

SpringBoot的优势

主要优势:

  1. 快速构建项目。
  2. 项目可独立运行,无须外部依赖Servlet容器。
  3. 对主流框架无配置支持,简化开发,也可以修改默认值。
  4. 提供运行时的应用监控。
  5. 极大的提高了开发、部署效率。 与spring cloud天然集成

限制:将现有或传统的Spring Framework项目转换为Spring Boot应用程序是一个非常困难和耗时的过程。它仅适用于全新Spring项目

微服务

什么是微服务?

2014年,由martin fowler这个人在自己的博客中提出的。 它是一种“软件的架构风格”,一个应用应该是一组小型服务。各个小型服务运行在各自的环境中,通过http的方式进行互通。

单体应用

传统的应用架构,ALL IN ONE模式。

 

微服务和传统应用的对比

SpringBoot的环境准备

环境准备

  1. Jdk8.0以上。
  2. Maven3.x以上,需要设置jdk8的运行环境。
  3. 开发工具:sts、idea。
  4. SpringBoot。

使用IntelliJ IDEA创建SpringBoot项目。

SpringBoot是基于Maven工程来创建的。

这种生成方式需要联网下载对应的模板内容。会帮助我们来生成SpringBoot的基本框架。

根据模板创建好SpringBoot项目后,默认在resources模板下面会生成一下几个目录和文件。

static:主要用来保存所有的静态资源,包括js,css,image等。

templates:保存所有的模板页面。SpringBoot默认以jar包的方式来部署项目,所以默认是不支持jsp页面的,但是可以使用模板引擎(freemarker,thymeleaf)。

application.properties:Spring Boot默认的配置文件。默认情况下SpringBoot是不需要配置文件的,但是可以通过这个类修改默认值。比如修改端口号。

 

修改默认的端口号:

在application.properties中可以修改springboot的配置信息。

修改默认的端口号 server.prot=8081

使用 Eclipse(STS) 创建SpringBoot项目。

在STS中也集成了对SpringBoot模板的支持。我们可以通过STS来创建SpringBoot项目。

设置SpringBoot的parent

在SpringBoot中,必须继承spring-boot-starter-parent这个包,这个是SpringBoot的默认配置信息,极大的提高了我们的开发效率。

    <!-- 该父项目中包含了所依赖包的版本号信息。以后我们导入jar包时,就可以不需要指定版本号了。-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
        <!-- 该包中导入了SpringBoot的Web运行环境所依赖的jar包。-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

实现一个 ''Hello World''

@Controller
public class HelloControllor {

    @ResponseBody
    @RequestMapping("home")
    public String home(){
        return "Hello World!";
    }
}

直接使用SpringBoot插件运行。

启动浏览器,输入localhost:8080即可看到页面。

运行部署的项目

直接将项目打包成.jar文件之后。就可以通过java –jar springboot_xxx.jar命令运行项目。不需要另外安装tomcat等其他工具,极大的简化了部署流程。(这里就不做多演示了)

SpringBoot启动器

在SpringBoot中,有一个非常重要的概念,就叫“场景启动器”,它帮助我们导入对应模块正常运行所依赖的组件。

SpringBoot将所有的功能场景都抽取出来,做成一个个的Starters(启动器),只需要在项目中引入这些starter相关场景的所依赖的环境都会导入进来。要什么功能就导入什么样的启动器。

SpringBoot和Maven集成

在SpringBoot中,我们只需要使用@SpringBottApplication注解修饰入口方法类,然后运行main方法就可以启动Springboot,非常方便。

@SpringBootApplication
public class DemoApplication {

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

    }
}

@SpringBootApplication

SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用。

该注解其实是一个组合注解,其中包含了一些其它的注解。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

@SpringBootConfiguration

该注解是SpringBoot的配置类,标注在某个类上,表示该类是SpringBoot的一个配置类。

这个注解也包含几个其它的注解。

  1. @Configuration:配置类上来标注这个注解。配置类也是容器中的一个组件。
  2. @EnableAutoConfiguration:开启自动配置功能。以前我们需要配置的东西,现在我们都不需要配置了,SpringBoot帮我们自动配置了。

@EnableAutoConfiguration

在@ EnableAutoConfiguration注解中又包含了两个比较重要

  1. @AutoConfigurationPackage:自动配置包,通过@Import(AutoConfigurationPackages.Registrar.class)类来指定对应的包。默认是将@SpringBootApplication所在的包以及该包下的所有子包导入到容器中。
  2. @Import(AutoConfigurationImportSelector.class):导入哪些组件的选择器。将所有需要导入的组件以全类名的方式返回,这些组件将会返回给一个List<String> configurations集合中,这些类是各种组件的自动配置文件,然后被添加到容器中。

SpringBoot自动配置

SpringBoot中最核心的功能就是自动配置类,在SpringBoot中会加载大量的自动配置类。

我们可以查看我们需要的功能有没有SpringBoot默认写好的自动配置类。如果有就不需要配置了,如果没有,可以根据对应的XxxProperties类查看相关的属性。然后再配置文件对修改对应的属性值即可

XxxxAutoConfiguration:自动配置类。

XxxxProperties:封装配置文件中的相关属性。

XxxxAutoConfiguration:

我们通过SpringBoot会加载大量的AutoConfiguration配置类,其中对应相关组件的配置信息。 该类是通过全注解方式来配置相关的属性。

在这个配置类中,我们也可以看到一些@Conditional开头和以Properties结尾的类。

  • 以@Conditional开头的表示的是条件类。
  • 以Properties结尾的表示的是对应的属性类。

Conditional扩展

在SpringBoot自动配置类中存在大量的@Conditional开头的注解,这些注解的作用是当满足某些条件时,该注解才会生效。

@Conditional扩展注解

作用(判断是否满足当前指定条件)

@ConditionalOnJava

系统的java版本是否符合要求

@ConditionalOnBean

容器中存在指定Bean;

@ConditionalOnMissingBean

容器中不存在指定Bean;

@ConditionalOnExpression

满足SpEL表达式指定

@ConditionalOnClass

系统中有指定的类

@ConditionalOnMissingClass

系统中没有指定的类

@ConditionalOnSingleCandidate

容器中只有一个指定的Bean,或者这个Bean是首选Bean

@ConditionalOnProperty

系统中指定的属性是否有指定的值

@ConditionalOnResource

类路径下是否存在指定资源文件

@ConditionalOnWebApplication

当前是web环境

@ConditionalOnNotWebApplication

当前不是web环境

@ConditionalOnJndi

JNDI存在指定项

虽然默认情况下加载了非常多的自动配置类文件,但是由于Conditional的限制,并不会加载所有的配置类。可以通过debug=true打开springboot的日志信息来查看加载了哪些自动配置类。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值