SpringBoot学习-初始化与运行

SpringBoot学习-初始化与运行

1.软件环境

  • JDK1.8
  • maven仓库
  • idea或者STS

2.初始化的一个简单项目

  • 初始化步骤

1.步骤一

在这里插入图片描述 阿里网址:https://start.aliyun.com

2. 步骤二

在这里插入图片描述

3. 步骤三
  后期可以自己手动添加,不必太在意。

在这里插入图片描述

4. 步骤四

在这里插入图片描述

5. 步骤五
 等待创建,创建完成后,可以删除不用的文件,也可以留下来,无影响。

在这里插入图片描述

6. 步骤六

新版本SpringBoot可以加入父项目依赖,也可以不加。

<parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.3.0.RELEASE</version>
</parent>

在这里插入图片描述

  • 写一个hello程序

在这里插入图片描述

  • 可以使用@RestController代替Controller类

在这里插入图片描述

  • 启动主程序

在这里插入图片描述

  • 打开浏览器访问

    http://localhost:8080/hello
    

在这里插入图片描述

3.打包插件应用

  • 这个插件可以将应用打包成一个可执行的jar包 (将插件放入pom.xml)

    <build>
    	<plugins>
    		<plugin>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-maven-plugin</artifactId>
    		</plugin>
    	</plugins>
    </build>
    
  • 使用插件的package命令进行打包

  • java -jar 命令 运行 jar包

4.pom.xml

  • 父项目(版本控制)

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
    </parent>
    

    ctrl+右键打开 spring-boot-starter-parent ,发现 spring-boot-starter-parent父项目依赖于spring-boot-dependencies父项目

    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>2.3.0.RELEASE</version>
    </parent>
    

    所以spring-boot-dependencies这个父项目才是真正管理Spring-Boot应用的所有依赖版本。

    也是Spring Boot的版本仲裁中心;以后我们导入依赖是不需要写版本号;(没有在dependecies里面管理的依赖自然需要写版本号)

  • web模块依赖

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

​ 帮我导入web模块正常运行的所有依赖。

​ 具体可以查看更多starter(启动器)

  • Spring Boot 将所有功能场景抽取出来,做成一个个starters(启动器),只需要在项目里面引入启动器。

5.主程序类

  • @SpringBootApplication

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

  • 分析

    @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的配置类

    • @Configuration(Spring的注解)

      配置类上标注这个注解;

      配置类-------配置文件

      配置类也是容器中的一个组件;@Component

  • @EnableAutoConfiguration

    开启自动配置功能

    以前我们需要配置的东西,Spring Boot帮我们自动配置;

    • @AutoConfigurationPackage

      自动配置包

      • @Import({AutoConfigurationPackages.Registrar.class})

      • @Import({Registrar.class})

        Spring的底层注解@Import,给容器中导入一个组件;

        导入的组件由Registrar.class(具体底层原理)

        new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0])
        

        对这段代码,设置断点调试,点击右键计算值(Evluate Expression)得到我们的包名。这个计算的结果就是(@SpringBootAplication标注的类)的目录

        将主配置类(@SpringBootAplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器中;

        所以controller包 和 主配置类(@SpringBootAplication标注的类)必须处在同一个目录下

    • @Import({EnableAutoConfigurationImportSelector.class})

    • @Import({AutoConfigurationImportSelector.class})

      给容器中导入组件

      翻译:自动导入组件的选择器

      将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中

      会给容器中导入非常多的自动配置类(xxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件。

      configurations = this.removeDuplicates(configurations);
      

      对这段代码进行代码调试,得到一个数组(如下是数组中的一些内容)

      org.springframework.boot.autoconfigure.aop.AopAutoConfiguration
      org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration
      

      这些类(组件)就是自动配置类(代替了以前使用xml文件进行的配置)

      该注解的作用就是给容器中导入非常多的自动配置类(xxxAutoConfiguration)

      自动配置类(xxxAutoConfiguration)给容器中导入这个场景需要的所有组件,并配置好这些组件。

      List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
      //getCandidateConfigurations方法的主要方法
      SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)   classLoader类加载器
      //进入loadFactoryNames方法的主要方法 (加载配置文件)
      loadSpringFactories()  
      Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");
      //旧版本引用的是常量 (大致方法类似)
      //通过类加载器获取类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
      

      打开External Libraries中的spring-boot-autoconfigure-2.3.0.RELEASE.jar

      打开META-INF/spring.factories文件找到org.springframework.boot.autoconfigure.EnableAutoConfiguration=\的以下内容就是刚才的(自动配置类)数组内容。

      读取META-INF/spring.factories配置文件获取到自动配置类的值,再将这些值导入到容器中,自动配置类就生效了,帮我们进行自动配置工作。

      spring-boot-autoconfigure-2.3.0.RELEASE.jar有所有的相关配置。

6.Resources文件夹中的目录结构

  • static

    保存所有的静态资源
    列如 js,css,images

  • templates

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

  • application.properties

    SpringBoot应用的配置文件,可以修改一些默认配置

7. 补充使用STS创建项目

  • 打开Windows里面的preferences添加host

阿里网址: https://start.aliyun.com

在这里插入图片描述

  • 配置maven仓库

在这里插入图片描述

  • 创建项目

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

  • 运行项目

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值