资讯专栏INFORMATION COLUMN

【Spring Boot】Spring Boot——HelloWorld

hellowoody / 1711人阅读

摘要:使用嵌入式容器,应用无需达成包。自动依赖与版本控制。准生产环境的运行时应用监控。告诉开启自动配置功能,这样自动配置才能生效。其组成为为的底层注解,表明给容器中导入一个组件,导入的组建由类提供。

Spring Boot——入门

spring boot简化了spring的开发,是J2EE一站式解决方案。

Spring Boot 的优缺点 优点

快速创建独立运行的服务,与主流框架集成。

使用嵌入式Serverlet容器,应用无需达成war包。

starters自动依赖与版本控制。

大量的自动配置,简化开发,支持自定义配置。

无需xml配置,开箱即用。

准生产环境的运行时应用监控。

云计算的天然集成。

缺点

入门容易,精通难;因为很多事情是spring boot自动完成的。

微服务

martin flow 《Microservices》

martin flow 《微服务》中文翻译

实例讲解 Hello World

main函数所在的HelloWorld类

    /**
     * @SpringBootApplication 用来告诉程序这是一个 spring boot 应用
     */
    @SpringBootApplication
    public class Helloworld {
        public static void main(String[] args) {
            // 启动Spring应用
            SpringApplication.run(Helloworld.class, args);
        }
    }

controller类

@Controller
public class HelloController {
    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "Hello world";
  }
}

Pom文件

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.3.RELEASE
    


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

    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
Spring Boot 主程序分析
    /**
     * @SpringBootApplication 用来告诉程序这是一个 spring boot 应用
     */
    @SpringBootApplication
    public class Helloworld {
        public static void main(String[] args) {
            // 启动Spring应用
            SpringApplication.run(Helloworld.class, args);
        }
    }

@SpringBootApplication 注解标注在某个类上的时候,说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用。该注解为组合注解,由以下注解组成:

    // 指定该注解可以给一个类型进行注解,比如类、接口、枚举
    @Target(ElementType.TYPE)
    // 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
    @Retention(RetentionPolicy.RUNTIME)
    // 它的作用是能够将注解中的元素包含到 Javadoc 中去。
    @Documented
    // 如果一个超类被 @Inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。
    @Inherited
    // 表明这个类是一个SpringBoot的配置类
    @SpringBootConfiguration
    // 告诉SpringBoot开启自动配置功能,自动配置才会生效
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    public @interface SpringBootApplication {}

@SpringBootConfiguration 标记在某个类上时,表明这个类是一个SpringBoot的配置类。其组成为:

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

​ 其中,@Configuration注解是Spring框架中基本的一个注解,在配置类上标记该注解,表明这个类是Spring的配置类。

@EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效。其组成为:

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

​ 其中 @AutoConfigurationPackage自动配置包,将主配置类(即@SpringBootApplication标注的类)所在包及其下面所有子包里面的所有组件扫描到Spring容器中。其组成为:

        @Import(AutoConfigurationPackages.Registrar.class)
        public @interface AutoConfigurationPackage {}

@Import为Spring的底层注解,表明给容器中导入一个组件,导入的组建由AutoConfigurationPackages.Registrar类提供。

@Import(AutoConfigurationImportSelector.class) 表明开启自动导入哪些组建的选择器;

​ AutoConfigurationImportSelector.class将要导入的组件以全类名的方式返回,这些容器会被导入到Spring容器。会给容器中导入非常多的自动配置类(一般以xxxAutoConfiguration结尾)。这些自动配置类的作用就是给容器中导入场景所需的自动配置,有了自动配置类,就可以不用手动写配置了

springboot01helloword

自动配置类是怎么找到的呢?

AutoConfigurationImportSelector 
  - selectImports(AnnotationMetadata annotationMetadata) 
    - List configurations = getCandidateConfigurations(annotationMetadata,
                    attributes); // 返回所有配置,对应上面的图
      - List configurations = SpringFactoriesLoader.loadFactoryNames(
                getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
        - protected Class getSpringFactoriesLoaderFactoryClass() {
        return EnableAutoConfiguration.class;
    }
            - String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
        - Enumeration urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");
            

从类路径下(如引用的各个jar包)的 META-INF/spring.factories中获取 EnableAutoConfiguration制定的值(自动配置类),这些值作为自动配置类导入到容器中,自动配置类就生效了,帮我们进行自动配置工作。以前我们需要自己配置的类,spring boot都自动配置了:

springboot01helloword1

spring-boot-autoconfigure包中,包含了J2EE 所有整合方案和所有自动配置。

orgspringframeworkootspring-boot-autoconfigure1.5.9.RELEASEspring-boot-autoconfigure-1.5.9.RELEASE.jar!orgspringframeworkootautoconfigure
使用Spring Initializer快速创建Spring Boot项目

首先,需要在IDEA中安装 Spring Assisstant插件。

选择需要的模块,IDEA会自动联网下载Spring boot 应用模板:

resources 文件夹中目录结构:

static:保存所有静态资源,如js、css、images;

templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持jsp页面);可以使用模板引擎(freemarker,thymeleaf);

application.properties:Spring Boot 应用的配置文件,可以修改一些默认设置,如服务的端口号。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74590.html

相关文章

  • Spring Boot 《一》开发一个“HelloWorld”的 web 应用

    摘要:一概括,如果使用开发一个的应用创建一个项目并且导入相关包。创建一个编写一个控制类需要一个部署应用的服务器如,特点设计目的是用来简化新应用的初始搭建以及开发过程。启动器可以和位于同一个包下,或者位于的上一级包中,但是不能放到的平级以及子包下。 一,Spring Boot 介绍 Spring Boot不是一个新的框架,默认配置了多种框架使用方式,使用SpringBoot很容易创建一个独立运...

    chaosx110 评论0 收藏0
  • Spring Boot (一)helloworld

    摘要:第二个类级别注解是。将引导应用程序,启动,从而启动自动配置服务器。比如想使用不同版本的,具体如下在标签中还可以指定编译的版本和项目的编码格式指定项目编码为使用插件可以为项目提供的操作方式,的个,默认。 引言 Spring 框架对于很多 Java 开发人员来说都不陌生。Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面。如此多的子项目和组件,一方面方便了开发人员的使用,另外...

    go4it 评论0 收藏0
  • Spring Boot 2.x(一):HelloWorld

    摘要:简介本系列基于的官方文档,除去了文档中一些冗余的东西,加上了一些自己的理解,意图是在于帮助更多初识的人来进行一次探险。本系列建议具有基础和使用经验的同学学习。至此,一个程序就编写完毕了。 简介 本系列基于Spring Boot 2.x 的官方文档,除去了文档中一些冗余的东西,加上了一些自己的理解,意图是在于帮助更多初识Spring Boot的人来进行一次探险。 本系列建议具有Java基...

    xuxueli 评论0 收藏0
  • 从0搭建SpringBootHelloWorld -- Java版本

    摘要:前言以前总是利用创建工程来使用只知其然不知其所以然今天从搭建一个基于的的项目创建工程与安装依赖利用或等创建一个工程一路即可此时的目录结构如下修改安装首先在中加入继承的主程序和一些依赖然后的加入程序依赖使成为项目框架主程序 前言 以前总是利用start.spring.io创建spring-boot工程来使用 ,只知其然不知其所以然 今天从0搭建一个基于mvnen的spring-boot...

    kaka 评论0 收藏0
  • springboot学习(一)——helloworld

    摘要:关于的自动配置,这个是重点之一,后面细说。在后续的学习中会慢慢学习到。红色标记的就是已经扫描到了并初始化成功了。 以下内容,如有问题,烦请指出,谢谢 springboot出来也很久了,以前零散地学习了不少,不过很长时间了都没有在实际中使用过了,忘了不少,因此要最近准备抽时间系统的学习积累下springboot,给自己留个根。 因为以前学过一些,这里就主要根据官方文档来学习了,可能会根据...

    The question 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<