@SpringBootApplication启动类详解

@SpringBootApplication启动类详解

SpringBoot所具备的特征有

  • 内嵌Tomcat或Jetty等Servlet容器;(这个最赞!)
  • 可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
  • 提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
  • 尽可能自动配置Spring容器;
  • 提供准备好的特性,如指标、健康检查和外部化配置;

接下来我们来看一下SpringBoot主程序

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

自动配置(@SpringBootApplication)

点开@SpringBootApplication,可以发现它是一个组合注解,主要是由这么几个注解构成的。

注解名称作用
@SpringBootConfiguration标明该类为配置类
@EnableAutoConfiguration启动自动配置功能
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })包扫描器

我们首先要研究的就是核心的两个注解 @SpringBootConfiguration和**@EnableAutoConfiguration**,逐个进行分析。

@SpringBootConfiguration
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration //配置IOC容器
public @interface SpringBootConfiguration {
}

从上述源码可以看出,SpringBootConfiguration其实就携带了一个**@Configuration注解**,这个注解我们再熟悉不过了,他就代表自己是一个Spring的配置类。所以我们可以认为:@SpringBootConfiguration = @Configuration 只是被重新封装命名而已

@EnableAutoConfiguration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage						//自动配置包
@Import({AutoConfigurationImportSelector.class})  //自动配置类扫描
public @interface EnableAutoConfiguration {    
 	String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";    
	Class<?>[] exclude() default {};    
	String[] excludeName() default {};
}

顾名思义,这个注解一定和自动配置相关,点进去看源代码之后可以发现, 这也是一个组合注注解。@EnableAutoConfiguration就是借助**@Import**来收集所有符合自动配置条件的bean定义,并加载到IoC容器。

(1)@AutoConfigurationPackage注解

static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
    Registrar() {    
    }    
    public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {        
        AutoConfigurationPackages.register(registry, (String[])(new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0]));    
    }    
}

(2)@Import({AutoConfigurationImportSelector.class})

它帮我们导入了AutoConfigurationImportSelector,这个类中存在一个方法可以帮我们获取所有的配置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值