Spring Boot(一)

在学习Spring Boot之前,建议大家先学习SSM框架,了解并掌握Spring和SpringMVC。

一.Spring Boot简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

特性:

  • 创建独立的Spring应用程序

  • 直接嵌入Tomcat、Jetty或Underow(无需部署战争文件)

  • 提供固定的“starter”依赖项以简化构建配置

  • 尽可能自动配置Spring和第三方库

  • 提供生产就绪的特性,如度量、运行状况检查和外部化配置

  • 绝对没有代码生成,也不需要XML配置

二.微服务简介

简而言之,微服务架构风格,就像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API。这些服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署。这些服务使用不同的编程语言书写,以及不同数据存储技术,并保持最低限度的集中式管理。

微服务:一种架构风格(服务微化),一个应用是一组小型的服务,应用之间可以通过HTTP的方式进行互通。每一个功能元素最终都是一个可独立替换和独立升级的软件单元。

详细参考微服务文档英文版 详细参考微服务文档船长翻译中文版

三.环境准备

1.Maven设置

给maven的settings.xml配置文件的profiles标签添加

<profile>
  <id>jdk-1.8</id>
  <activation>
    <activeByDefault>true</activeByDefault>
    <jdk>1.8</jdk>
  </activation>
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  </properties>
</profile>

2.IDEA设置

将Maven整合进来:再file->setting里面进行设置
在这里插入图片描述

四.Spring Boot创建HelloWorld

功能需求:浏览器发送hello请求,服务器接收并处理,响应一个Hello World字符串

  1. 创建一个maven工程(jar)

  2. 导入Spring Boot相关依赖

    在pom.xml中添加:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
  3. 编写Controller

    @Controller
    public class HelloController {
        
        @ResponseBody
        @RequestMapping("/hello")
        public String hello(){
            return "Hello world!";
        }
        
    }
    
  4. 编写一个主程序,启动Spring Boot

在这里插入图片描述

/**
 * @SpringBootApplication:来标注一个主程序类,说明是一个Spring Boot应用
 */
@SpringBootApplication
public class HelloWorldMainApplication {
    public static void main(String[] args) {
        //spring应用程序启动起来
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

  1. 测试

在这里插入图片描述

  1. 简化部署

在pom.xml中添加插件:

<!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

在这里插入图片描述

五.HelloWorld探究

1.pom文件

(1)父项目

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>
它的父项目是
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>1.5.9.RELEASE</version>
  <relativePath>../../spring-boot-dependencies</relativePath>
</parent>
他来真正管理Spring Boot应用里面的所有依赖版本
Spring Boot的版本仲裁中心:以后导入依赖默认不需要写版本(没有在dependencies里面管理的依赖需要声明版本号)

(2)启动器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

spring-boot-starter-web:

spring-boot-starter:spring-boot场景启动器,帮我们导入web模块正常运行所依赖的组件。

Spring Boot将所有功能场景抽取出来,做成了一个个的starters(启动器),只需要在项目里面引入这些start相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景启动器。

starters参考
在这里插入图片描述

2.主程序类

/**
 * @SpringBootApplication:来标注一个主程序类,说明是一个Spring Boot应用
 */
@SpringBootApplication
public class HelloWorldMainApplication {
    public static void main(String[] args) {
        //spring应用程序启动起来
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

@SpringBootApplication:Spring Boot应用标注子啊某个类上说明这个类是Spring Boot的主配置类,Spring Boot就应该应用这个类的main方法来启动Spring Boot应用。

@SpringBootApplication内容如下:

@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 {

(1).@SpringBootConfiguration

@SpringBootConfiguration:Spring Boot配置类;标注子啊某个类上,表示这是一个Spring Boot的配置类;

@SpringBootConfiguration内容如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}

@Configuration:配置类上来标注这个注解,配置类等同于配置文件,配置类也是容器的一个组件;@Component

@Configuration内容如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    String value() default "";
}

(2).@EnableAutoConfiguration

@EnableAutoConfiguration:开启自动配置功能

以前我们需要配置的东西Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉Spring Boot开启自动配置功能,这样自动配置功能才能生效。

@EnableAutoConfiguration内容如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
I.@AutoConfigurationPackage

@AutoConfigurationPackage:自动配置包,内容如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {

}

@Import(AutoConfigurationPackages.Registrar.class):

spring的底层注解@import,给容器中导入一个组件,导入的组件由AutoConfigurationPackages.Registrar.class将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器。

II.@Import(EnableAutoConfigurationImportSelector.class)

@Import(EnableAutoConfigurationImportSelector.class):给容器导入组件

EnableAutoConfigurationImportSelector.class:导入那些组件选择器,将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中。

会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景需要的组件,并配置好这些组件。
在这里插入图片描述
有了自动配置类,免去了我们手动编写配置注入功能组件等工作。

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata,
			AnnotationAttributes attributes) {
		List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
				getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) {
        String factoryClassName = factoryClass.getName();

        try {
            Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");
protected Class<?> getSpringFactoriesLoaderFactoryClass() {
		return EnableAutoConfiguration.class;
	}

以上三步最终效果:

SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);

**Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中自动配置类就生效,帮组我们进行自动配置工作。**以前我们需要配置的东西自动配置类都会帮我们做。

六.使用Spring Initializer快速创建Spring Boot项目

使用Spring Initializer创建项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选中需要的模块,向导会联网创建Spring Boot项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

默认生成的Spring Boot项目:

  • 主程序已经生成好
  • resources:
    • static: 保存所有静态资源(js、css等)
    • templates: 保存所有的模板页面,(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面)
    • application.properties: Spring Boot应用配置文件,可以修改一些默认配置。

更多学习内容请访问我的个人博客:赵先生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

b u g

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值