springBoot启动一览

  1. pom的配置

在parent节点指定了要依赖的springboot的版本信息。它自己又在 

<relativePath>../../spring-boot-dependencies</relativePath> 中设置了所需要的各个jar包的依赖

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>    
        <!--加上这个依赖,ConfigurationProperties 可以使用这个注解,将java类与配置文件做个绑定-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2.启动类的设置。这里要注意得到是junit的test类要和启动类的报位置一致,不然在运行junit测试的时候会抛出找不到main方法。启动类的设置如下:

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

在没有任何配置的情况下,他会自动将系统所需要的组件扫描到spring容器中主要是 @SpringBootApplication的功能。@SpringBootApplication是一个组合注解,由如下注解组合而成,其中最主要的是 SpringBootConfiguration和EnableAutoConfiguration

@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) })

2.1:SpringBootConfiguration作用是起到 @Configuration的作用将该类注册到spring的容器中

2.2:EnableAutoConfiguration也是组合注解

@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)

AutoConfigurationPackage注解

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

AutoConfigurationPackages


@Order(Ordered.HIGHEST_PRECEDENCE)
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {


    @Override
    public void registerBeanDefinitions(AnnotationMetadata metadata,
        BeanDefinitionRegistry registry) {
        //将元数据的包下面的所有类+子包下面的类全部加载到spring容器中
        register(registry, new PackageImport(metadata).getPackageName());
    }

}

register方法是读取使用了该注解的类的包路径,并把该路径下面所有的类都注册到spring容器中。

2.2.1: import注解应用的  EnableAutoConfigurationImportSelector 

该类的父类:AutoConfigurationImportSelector的 selectImports().

@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
    if (!isEnabled(annotationMetadata)) {
        return NO_IMPORTS;
    }
    try {
        AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
        .loadMetadata(this.beanClassLoader);

看他loadMetaData方法:是将springboot中一个配置文件配置所有的spring运行所需要的类加载到容器里面。配置类看附件

protected static final String PATH = "META-INF/spring-autoconfigure-metadata.properties";

public static AutoConfigurationMetadata loadMetadata(ClassLoader classLoader) {
    return loadMetadata(classLoader, PATH);
}

 

转载于:https://my.oschina.net/u/3711426/blog/1810703

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值