首页 > 其他分享 >Springboot三种启动方式

Springboot三种启动方式

时间:2023-04-12 21:32:31浏览次数:38  
标签:Springboot 启动 springframework annotation public 三种 import ComponentScan class



在https://start.spring.io/上创建一个springboot工程

Springboot三种启动方式_启动方式

生成的代码中的启动方式咱们暂时定义为默认方式:

/**
 * @auther: lawt
 * @date: 2018/12/1 17
 * @Description: 默认启动方式
 */
@SpringBootApplication
public class MicroServicesSpringBootApplication {
public static void main(String[] args) {
//端口默认为8080
        SpringApplication.run(MicroServicesSpringBootApplication.class, args);
    }
}

第二种方式:

/**
 * @auther: lawt
 * @date: 2018/12/1 17
 * @Description: 第二种启动方式
 */
@SpringBootApplication
public class MicroServicesSpringBootApplication1 {
public static void main(String[] args) {
//server.port=0 随机产生一个接口-随机向操作系统要一个可用的端口,
        new SpringApplicationBuilder(MicroServicesSpringBootApplication.class)
                .properties("server.port=0")
                .run(args);
    }
}

第三种启动方式:

/**
 * @auther: lawt
 * @date: 2018/12/1 17
 * @Description: 第三种启动方式
 */
@SpringBootApplication
public class MicroServicesSpringBootApplication2 {
public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(MicroServicesSpringBootApplication2.class);
        Map<String, Object> properties = new HashMap<>();
        properties.put("server.port", 0);//不写端口,默认那是8080
        springApplication.setDefaultProperties(properties);
        springApplication.run(args);
    }
}


神奇的注解


@SpringBootApplication


咱们看看其源码:

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.core.annotation.AliasFor;
/**
 * Indicates a {@link Configuration configuration} class that declares one or more
 * {@link Bean @Bean} methods and also triggers {@link EnableAutoConfiguration
 * auto-configuration} and {@link ComponentScan component scanning}. This is a convenience
 * annotation that is equivalent to declaring {@code @Configuration},
 * {@code @EnableAutoConfiguration} and {@code @ComponentScan}.
 *
 * @author Phillip Webb
 * @author Stephane Nicoll
 * @since 1.2.0
 */
@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 {
   @AliasFor(annotation = EnableAutoConfiguration.class)
    Class<?>[] exclude() default {};
   @AliasFor(annotation = EnableAutoConfiguration.class)
    String[] excludeName() default {}; 
   @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
    String[] scanBasePackages() default {};
   @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
    Class<?>[] scanBasePackageClasses() default {};
}


先看他上面的一个注解:


@ComponentScan


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
    ......
 }

用于扫描,3.1版本来的,

再看它上面的另外一个注解:


@EnableAutoConfiguration


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

激活自动装配 @Enable -> @Enable 开头的有:

  • @EnableWebMvc
  • @EnableTransactionManagement
  • @EnableAspectJAutoProxy
  • @EnableAsync


再看他上的另外一个注解:


@SpringBootConfiguration


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

}

等价于 @Configuration -> Configuration Class 注解

标签:Springboot,启动,springframework,annotation,public,三种,import,ComponentScan,class
From: https://blog.51cto.com/u_11702014/6186270

相关文章

  • springboot 中的 classpath 指的是什么路径?
    classpath其本质其实是指项目打包后的classes下的路径,一般用来指代“src/main/resources”下的资源路径。通常会在各种配置文件中使用【classpath】关键字,例如:yml配置文件:WebMvcConfigurer配置类:......
  • springboot整合阿里云OSS实现多线程下文件上传(aop限制文件大小和类型)
    内容涉及:springboot整合阿里云oss自定义注解及aop的使用:对上传文件格式(视频格式、图片格式)、不同类型文件进行大小限制(视频和图片各自自定义大小)线程池使用:阿里云OSS多线程上传文件阿里云OSS分片上传大文件 业务需求需求一:前端传递单个或多个小文件(这里......
  • docker02 设置镜像 启动停止 镜像容器相关命令
    今日内容详细目录今日内容详细1什么是laas-Paas和Saas2docker启动设置镜像2.1启动与停止常用命令3镜像相关命令4容器相关命令1什么是laas-Paas和SaasIaas:Infrastructure-as-a-Service(基础设施即服务)IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护......
  • 什么是Iaas-Paas和Saas,Docker镜像与容器,docker 启动设置镜像,docker启动与停止常用命令
    什么是Iaas-Paas和Saas,Docker镜像与容器,docker启动设置镜像,docker启动与停止常用命令,镜像相关命令,容器相关命令什么是Iaas-Paas和Saas#Iaas----->Infrastructure-as-a-Service(基础设施即服务) Iaas公司会提供场外服务器,存储和网络硬件,可以租用场外的服务器。节省了维护......
  • springboot filter 和 interceptor 使用
    userholderpublicclassUserHolder{privatestaticThreadLocal<String>userThreadLocal=newThreadLocal<>();//为当前的线程变量赋值上用户信息publicstaticvoidsetLoginUser(Stringuser){userThreadLocal.set(user);}//从当前......
  • SpringBoot启动后获取特定注解的Bean实例代码(转)
    来自:https://zhuanlan.zhihu.com/p/375973197本文研究的主要是Spring启动后获取所有拥有特定注解的Bean,具体如下。最近项目中遇到一个业务场景,就是在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象,第一个想到的是ApplicationContextAware,在setApplicationContext中......
  • springboot中获取指定包下的包含某个注解的全部类(转)
    来自:https://www.cnblogs.com/lexiaoyao1995/p/13943784.html需求获取spring项目里的带有某个注解的全部类难点需要扫描指定包路径下的类,同时也要扫描其下所有子包思路可以自己实现,推荐使用spring的工具类代码packagecom.example.demo;importcom.example.demo.annos......
  • 1 什么是Iaas-Paas和Saas、 2 docker 启动设置镜像、3 镜像相关命令、 4 容器相关命令
    目录1什么是Iaas-Paas和Saas2docker启动设置镜像2.1启动与停止常用命令3镜像相关命令4容器相关命令1什么是Iaas-Paas和SaasIaas:Infrastructure-as-a-Service(基础设施即服务)IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在......
  • WSL启动报错WslRegisterDistribution failed with error: 0x8007019e
    Installing,thismaytakeafewminutes...WslRegisterDistributionfailedwitherror:0x8007019eTheWindowsSubsystemforLinuxoptionalcomponentisnotenabled.Pleaseenableitandtryagain.Seehttps://aka.ms/wslinstallfordetails.Pressanykeyto......
  • kafka在linux系统下设置开机启动
    安装完成kafka后,进入/etc/init.d目录在该目录下创建文件kafka,内容如下:#!/bin/bash#chkconfig:23452090#description:kafka#processname:kafkaexportJAVA_HOME=/usr/java/jdk1.8.0_161#换成自己的实际地址case$1in #kafka换成自己的实际地址start)suroot/us......