欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

这是一篇关于Spring Boot入门的博客

程序员文章站 2024-03-20 19:12:28
...

简介

Spring Boot是来简化Spring应用开发的一个框架,约定大致配置,去繁从简,just run就能创建一个独立的,产品级的应用。是整个Spring技术栈的大整合。
J2EE面临的问题:

  • 笨重的开发
  • 繁多的配置
  • 低下的开发效率复杂的部署流程
  • 第三方技术继承难度大

解决:“Spring全家桶时代”

  • Spring Boot ——> J2EE一站式解决方案
  • Spring Cloud ——> 分布式整体解决方案

Spring Boot优点:

  • 快速创建独立运行的Spring项目以及于主流框架集成
  • 使用嵌入式的Servlet容器,应用无需达成jar包
  • starters自动依赖以及版本控制
  • 大量的自动配置,简化开发,也可修改默认值
  • 无须配置XML,无代码生成,开箱即用
  • 准生产环境的运行时应用监控
  • 与云计算天然集成

微服务

单体服务(All In One)

所有的东西都运行在一个应用里面
这是一篇关于Spring Boot入门的博客

  • 优点:所有的应用达成war包,部署到tomcat中,开发测试简单:因为都是一个应用,没有牵扯到多个应用的互联互通;部署简单:只需要把所有的应用打成一个war包,部署到tomcat中,不会给运维带来多大困难;扩展简单:当应用负载能力不足时,将功能相同的应用复制几份部署到不同的服务器中,而这些不同的服务器运行相同的应用,通过负载均能机制,提升并发能力。
  • 缺点:牵一发而动全身,往往因为一点小小的改动,从而整个项目需要重新部署

微服务

是一种架构风格,一个应用应该是一组小型服务,而这些小型服务都运行在自己的进程内,可以通过HTTP的方式进行互通
这是一篇关于Spring Boot入门的博客
把每一个功能元素提取出来,通过功能元素的动态组合,将这个应用的水平赋值替换为功能元素级别的赋值,节省了资源的调用,并且每一个功能元素都是可替换的、可独立升级的单元

详细参照微服务文档

Spring Boot的Hello World

功能

浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串

实现

创建一个maven工程;(jar)

导入Spring Boot依赖

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

编写主程序,启动Spring Boot

/**
 * @SpringBootApplication 来标注一个主程序,说明这是一个Spring Boot应用
 */
@SpringBootApplication
public class HelloWorldMainApplication {

    public static void main(String[] args) {

        //Spring应用启动
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

编写相关的ControllerService

@Controller
public class HelloController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return "hello world";
    }
}

运行HelloWorldMainApplication测试

这是一篇关于Spring Boot入门的博客

简化部署

<!--    将应用打包成可执行的jar包-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

点击左侧的package,将应用达成jar包
这是一篇关于Spring Boot入门的博客
在jar包所在位置使用cmd命令执行
这是一篇关于Spring Boot入门的博客

HelloWorld项目的深入

POM文件

父项目

	<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>
</parenet>

它相当于是真正管理Spring Boot应用中的所有依赖版本,Spring Boot的版本仲裁
以后我们导入依赖默认是不需要写版本的(没有在dependencies管理的需要声明版本号)

启动器

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

spring-boot-starter-web:

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

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

主程序类,主入口类

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

@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:Spring Boot的配置类;标注在某个类上,说明这是Spring Boot的配置类
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

@Configuration:配置类上标注这个注解;相当于配置文件,注解开发Spring时就是用的这个注解,@Configuration也是容器中的一个组件(@Component

  • @EnableAutoConfiguration:开启自动配置功能,以前我们需要配置的东西,都不需要配置了,使用该注解,Spring Boot帮我们开启自动配置功能,将主配置类(@SpringBootApplication)的所在包的所有子包的所有组件扫描到Spring容器中
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage:自动配置包,@Import(AutoConfigurationPackages.Registrar.class)为Spring的底层注解,给容器中导入一个组件
@Import({EnableAutoConfigurationImportSelector.class}),给容器导入组件EnableAutoConfigurationImportSelector:导入哪些组件的选择器,将所有需要导入的组件以全类名的方式返回,这些组件会被添加到容器中,会给容器中导入非常多的配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置号这些组件;有了自动配置类,免去了我们手动编写注入功能组件等的工作
这是一篇关于Spring Boot入门的博客
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,beanClassLoader) SpringBoot启动的时候,从类路径下的 META-INF/spring.factories 中获取EnableAutoConfiguartion指定的值,将这些值,作为自动配置类导入到容器中,自动配置类就生效了,帮我们进行自动配置工作,省去我们写代码
J2EE的整体整合解决方案都在…\springframework\boot\spring-boot-autoconfigure\1.5.9.RELEASE\spring-boot-autoconfigure-1.5.9.RELEASE.jar!\org\springframework\boot\autoconfigure中