配置优先级:
    spring boot中自此三种格式的配置文件:
        server.port:8081
        server.port:8082
        server.port:8083
    spring boot还支持两种外部配置:
        java系统属性:
            -Dserver.port=9000
        命令行参数:
            --server.port=9002
    在cmd窗口运行jar包:
        java -jar springboot-web-config-0.0.1-SNAPSHOT.jar
        java -Dserver.port=9001 -jar springboot-web-config-0.0.1-SNAPSHOT.jar
        java  -jar springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=9002
        java -Dserver.port=9001 -jar springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=9002
        java -Dspring.datasource.password=123root  -jar springboot-web-config-0.0.1-SNAPSHOT.jar
        java -Dspring.datasource.password=123root  -jar springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=9002
    注意:
        Springboot项目进行打包时,需要引入插件 spring-boot-maven-plugin (基于官网骨架创建项目,会自动添加该插件)


Bean管理:
    获取Bean:
        默认获取:
            默认情况下,Spring项目启动时,会把bean都创建好放在IOC容器中。
                @Autowired
    private ApplicationContext applicationContext;
        主动获取:
            根据name获取:
                Object getBean(String name)
            根据类型获取:
                <T> T getBean(Class<T> requiredType)

            根据name和bean类型获取:
                <T> T getBean(String name, Class<T> requiredType)

    Bean作用域:
        五种作用域:
            singleton
                容器内同名称的bean,只能有一个实例(单例)默认
            prototype
                每次使用该 bean 时会创建新的实例(非单例)
            request
                每个请求范围内会创建新的实例(web环境中,了解即可)
            session
                每个会话范围内会创建新的实例(web环境中,了解)

            application
                每个应用范围内会创建新的实例(web环境中,了解)

        注意事项:
            默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)。

            prototype的bean,每一次使用该bean的时候都会创建一个新的实例。
            实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性。

    第三方Bean:
        如果要管理的bean对象来自于第三方(不是自定义的),是无法用 @Component 及衍生注解声明bean的,就需要用到 @Bean注解。

        若要管理的第三方bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类。

        注意:
            通过@Bean注解的name或value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名。

            如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配。


Spring boot原理:
    起步依赖:
    自动配置:
        前言:
            SpringBoot的自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。

        实现方案:
            方案一:
                使用@ComponentScan组件扫描注解,手动扫描引入的第三方依赖中的bean
            方案二:
                说明:@Import 导入。使用@Import导入的类会被Spring加载到IOC容器中,导入形式主要有以下几种:

                导入普通类:
                    @Import(TokenParser.class)  //普通类 --> 交给ioc容器管理,成为ioc容器
                导入配置类:
                    @Import(HeaderConfig.class)   //配置类 --> 配置类中的的所有bean都交给ioc容器管理,并成为ioc容器的bean
                导入 ImportSelector接口实现类:
                    @Import(MyImportSelector.class) //ImportSelector 接口实现类 ---> 批量导入
                @EnableXxxx注解,封装@Import注解 

                    @EnableHeaderConfig
        源码跟踪:
            @SpringBootApplication注解:
                介绍:
                    该注解标识在SpringBoot工程引导类上,是SpringBoot中最最最重要的注解。该注解由三个部分组成:

                组成:
                    1.@SpringBootConfiguration:该注解与 @Configuration 注解作用相同,用来声明当前也是一个配置类。

                    2.@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。

                    3.@EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。
                自动装配原理:@Conditional
                        @Bean
   // @ConditionalOnClass(name = "io.jsonwebtoken.Jwts") //判断环境中是否存在对应的字节码文件,如果存在才祖册bean
    public HeaderParser headerParser(){
        return new HeaderParser();

    }
                      // @ConditionalOnMissingBean //判断环境中是否存在该bean,如果不存在,在注册
    public HeaderParser headerParser(){
        return new HeaderParser();

    }
                        @ConditionalOnProperty(name = "sde",havingValue = "666")
    public HeaderParser headerParser(){
        return new HeaderParser();

    }
 

12-20 08:46