美文网首页
SpringBoot2.0深度实践学习笔记(五)之 Spring

SpringBoot2.0深度实践学习笔记(五)之 Spring

作者: Sam_L | 来源:发表于2019-04-08 21:45 被阅读0次
    (一) SpringApplication
    • 定义
      SpringApplication 是spring引用引导类,提供便利的自定义行为方法
    • 2种场景:
      嵌入式Web应用和非Web容器
    • 运行:
      调用run方法
    (二) SpringApplication 基本使用

    先来看一下,下面这个启动类DiveInSpringBootApplication:

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

    说明:
    SpringApplication.run(DiveInSpringBootApplication.class, args){}
    第一个参数:DiveInSpringBootApplication类是通过静态方法SpringApplication.run()来运行的
    第二个参数args,java进程启动参数,通过外部传输

    (三)自定义 SpringApplication

    通过2种方式进行调整

    1) 通过 SpringApplication API 调整

    SpringApplication springApplication = new SpringApplication(DiveInSpringBootApplication.class);
    springApplication.setBannerMode(Banner.Mode.CONSOLE);
    springApplication.setWebApplicationType(WebApplicationType.NONE);
    springApplication.setAdditionalProfiles("prod");
    springApplication.setHeadless(true);

    2)通过 SpringApplicationBuilder API 调整----官网称为流畅的API (Fluent Builder API)

    new SpringApplicationBuilder(DiveInSpringBootApplication.class)
    .bannerMode(Banner.Mode.CONSOLE)
    .web(WebApplicationType.NONE)
    .profiles("prod")
    .headless(true)
    .run(args);
    -----Run是启动,其他是行为的调整

    (四) SpringApplication 准备阶段
    • 配置:Spring Bean 来源
    • 推断:Web 应用类型和主引导类(MainClass)
    • 加载:应用上下文初始器和应用事件监听器

    具体:

    第一部分 配置 Spring Boot Bean 源
    配置源有2种方式:
    1)Java 配置 Class
    2) XML 上下文配置文件集合

    Java 配置 Class

    如:上面的启动类DiveInSpringBootApplication,因为启动类上配置了java的模式注解@SpringBootApplication-----这个注解元标注了@SpringBootConfiguration-
    所以这就是一个配置注解或者配置bean

    【源码】


    Image 1.png
    修改代码---使用SpringApplicationBuilder 进行调整
    @SpringBootApplication
    public class DiveInSpringBootApplication {
    
        public static void main(String[] args) {
    
            new SpringApplicationBuilder(DiveInSpringBootApplication.class)
                    //.web(WebApplicationType.NONE)
                    .run(args);
    
            //SpringApplication.run(DiveInSpringBootApplication.class, args);
        }
    
    }
    

    SpringApplicationBuilder会将这个java class作为参数传进去,就成为一个源

    说明:
    SpringApplicationBuilder源码:
    参数sources:不同的来源,用变量参数的行为表达,可以有多个来源


    5.png
    XML 上下文配置文件集合

    用于 Spring 传统配置驱动中的 XML 文件。
    假设遗留系统的一些组件封装的比较好了,不需要重复开发,可以把spring应用配置文件放到这个源里进行配置。

    (五) BeanDefinitionLoader 加载器

    构造器的参数:BeanDefinitionRegistry:bean定义的注册器
    sources,有可能有多种
    【源码】BeanDefinitionLoader ()


    6.png

    //标注bean的定义阅读器AnnotatedBeanDefinitionReader
    //XMLbean的定义阅读器 XmlBeanDefinitionReader

    这2个阅读器说明----Sources是有2个驱动的一个是java class 和xml方式

    (六)【栗子---配置 Spring Boot Bean 源】

    准备项目,新建一个模块----spring-application模块,包名和之前的保持一致

    1、java配置class

    (1)pom依赖:

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    

    (2)新建一个启动类SpringApplicationBootstrap

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

    运行:显示正常启动

    把类和参数添加到run方法中,添加注解@SpringBootApplication正常启动

    【换一种方式再继续理解一下】

    在配置java bean的时候,也可以不采用他的源进行装配
    写一个普通配置在这个配置上加上@SpringBootApplication
    把这个类丢进run 里,运行一样成功

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

    说明:
    就是SpringApplication.run的时候,丢进run里的类不一定是主类,任意的配置bean就行,只要有@SpringBootApplication标注它就是合法的bean

    2、通过 SpringApplication API的方式调整,进行配置
    【修改启动类】这种方式比较麻烦
    public class SpringApplicationBootstrap {
        public static void main(String[] args) {
    
            //SpringApplication.run(ApplicationConfiguration.class,args);
    
            Set<String> sources = new HashSet<>();
            //配置class名称
            sources.add(ApplicationConfiguration.class.getName());
            SpringApplication springApplication= new SpringApplication();
            springApplication.setSources(sources);
            ConfigurableApplicationContext context =springApplication.run(args);
    //打印bean
            System.out.println("Bean:" + context.getBean(ApplicationConfiguration.class));
        }
    
        @SpringBootApplication
        public static class ApplicationConfiguration{
    
        }
    }
    
    

    运行:
    根据打印结果会读出class,这个class就是bean


    10.png

    说明:
    先看源码
    【源码】SpringApplication():
    采用new的方式,变量参数,可以有primarySource 多个源


    7.png

    【源码】
    setSources():采用source进行配置---这个source可以使一个className,package name,或者XML resource location


    8.png

    source可以用多种源的方式进行替代
    这里ApplicationConfiguration就是一个bean的来源,
    标注了@SpringBootApplication,ApplicationConfiguration就是一个bean了
    Run()会返回一个ConfigurableApplicationContext


    9.png
    ❤【总结一下】

    Java 配置 Class 或 XML 上下文配置文件集合,用于 Spring Boot BeanDefinitionLoader 读取 ,并且将配置源解析加载为Spring Bean 定义
    数量:一个或多个以上

    相关文章

      网友评论

          本文标题:SpringBoot2.0深度实践学习笔记(五)之 Spring

          本文链接:https://www.haomeiwen.com/subject/dulmiqtx.html