SpringBoot项目开发---03--快速创建

概述:我使用的是IDEA,第一次创建没有使用Spring 初始化。

1 快速创建工程

  • IDEA上新建一个空的jar类型 的 maven 工程
  • 选中Module

  • 选择jdk版本

  • 确定工程名和坐标名

groupid和artifactId被统称为“坐标”是为了保证项目唯一性,maven仓库中依靠这两个属性来确定项目。

  1. GroupId:项目组织的唯一标识符,在实际开发中对应JAVA的包的结构,就是main目录里java的目录结构,开头以cn、com、org。
  2. ArtifactId:项目的唯一标识符,在实际开发中一般对应项目的名称,就是项目根目录的名称;

  • 填写项目名和路径,尽量保持工程在同一目录下。

修改pom文件

  • 在pom.xml文件中添加Spring Boot的相关父级依赖,spring-boot-starter-parent 是一个特殊的starter,它 提供了项目相关的默认依赖,使用它之后 ,常用的包依赖可以省去 version 标签。
  • dependencies中添加构建WEN项目所需要的依赖。

想要查看,Ctrl+选中即可

<!--
    spring-boot-starter-parent : 是当前项目的父依赖
    spring-boot-starter-parent 继承 spring-boot-dependencies
    spring-boot-dependencies 里面定义了很多组件版本号,我们引用对应依赖时,不需要写<version>标签
    -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>


    <!--spring-boot-starter-web
    spring-boot-starter-web
    spring-boot-starter : 它是SpringBoot的场景启动器,它针对不同场景定义了很多不同的场景启动器,
      你的项目需要使用哪些场景启动器,则直接依赖对应的启动器就可以了.

    -->
    <!--spring-boot-starter-web 构建WEb项目, 比如:tomcat springmvc-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
  • 我们会惊奇地发现,我们的工程自动添加了好多好多jar, 这些 jar包正是开发时需要导入的jar

创建控制器Controller

  • 注解

Controller:处理http请求。至于后来的RestController相当于之前的@Controller加上@ResponseBody的组合,Spring4之后的注解,返回json的需要。

RequestMapping:配置url映射,后面可以?添加参数进行传递。

@Controller
public class InitController {

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

创建引导类

  • 主要作用是作为启动 Spring Boot 项目的入口

注解

/**
 *
 * @SpringBootApplication 用于标识 一个引导类,说明当前是一个 SpringBoot项目。主要有三个注解构成
 *    @SpringBootConfiguration
 *      @Configuration 定义配置类, 等价于配置文件
 *        @Component 添加到spring容器中,表示 是一个组件
 *
 *   @EnableAutoConfiguration
 *      @AutoConfigurationPackage 将引导类所在包及其子包下面所有的组件添加 到spring 容器中
 *      @Import({AutoConfigurationImportSelector.class})
 *          1. 将所有组件以全类名的方式返回,并且添加到spring 容器中
 *          2. 给容器中导入自动配置类(**AutoConfiguration),无需手动编写配置注入到组件
 *    @ComponentScan 被该注解标识的类,会被spring容器进行管理.
 */

详情

AutoConfigurationPackage标注用@Import({Registrar.class})

 // 扫描类的完整包,并放进metadata里面进行传递。
  //断点调试

public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
            AutoConfigurationPackages.register(registry, (new AutoConfigurationPackages.PackageImport(metadata)).getPackageName());
        }

Import({AutoConfigurationImportSelector.class})重点AutoConfigurationImportSelector

/*将组件以全类名的形式扫描到Spring容器中,包括许多自动配置类,断点进行调试,查看configurations 参数
*/
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
configurations = this.removeDuplicates(configurations);

/*
  查看类是怎样加载,深层次getCandidateConfigurations,里面会有一个loadFactoryNames,
*/
 protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) 
{
  List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
  Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
   return configurations;
    }

/*
   loadFactoryNames加载工厂,里面的loadSpringFactories进行加载
   同时也就是说你需要那些自动配置类,也可以在这里进行配置。
*/
 public static List<String> loadFactoryNames(Class<?> factoryClass, @Nullable ClassLoader classLoader) {
        String factoryClassName = factoryClass.getName();
        return (List)loadSpringFactories(classLoader).getOrDefault(factoryClassName, Collections.emptyList());
    }

/*
下面是loadSpringFactories一部分 方法体内会显示具体加载路径,资源文件META-INF/spring.factories,这个架包在引入Spring是已经被引入。
在此文件中配置的所有自动配置类都会被进行扫描
*/
 Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");

/*
文件spring.factories中的EnableAutoConfiguration对应注解
*/
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

         文件截图

实验代码

   

@SpringBootApplication
public class HelloMainApplication {
    public static void main(String[] args) {     
        SpringApplication.run(HelloMainApplication.class, args);
    }
}

直接访问:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值