SpringBoot——配置的优先级+bean的管理

配置优先级

在springboot中支持三种不同的配置方式SpringBoot——配置的优先级+bean的管理_第1张图片

 

 环境准备:新建一个空的springboot项目,配置三种形式的配置文件

SpringBoot——配置的优先级+bean的管理_第2张图片

运行测试结果

经过测试可以知道

优先级的次序为: properties>yml>yaml

Java系统属性和命令行参数的属性配置

SpringBoot——配置的优先级+bean的管理_第3张图片

 流程:

SpringBoot——配置的优先级+bean的管理_第4张图片

 点开之后就是这个页面的模样,在右边把如图所示的一个程序实参的选项勾选上之后左边就可以自定义修改。​​​​​​​SpringBoot——配置的优先级+bean的管理_第5张图片

 修改完成后重启项目就可以看见端口号被修改为10010,这里命令行参数的属性配置优先级比java系统属性配置的优先级要高SpringBoot——配置的优先级+bean的管理_第6张图片

 把命令行配置去掉之后java系统配置就生效了

SpringBoot——配置的优先级+bean的管理_第7张图片

 项目打包之后指定java系统属性和命令行参数

如图所示,在打包完整个项目之后可以在运行jar包的命令前后指定java系统属性和命令行参数 

SpringBoot——配置的优先级+bean的管理_第8张图片

 在右边maven选项里面点击package就可以自打包,打包完之后就可以在左边target目录下面看见一个.jar后缀的文件

这里在文件夹上输入cmd就可以进入该文件夹下的专属cmd窗口​​​​​​​, 输入java查看所有命令SpringBoot——配置的优先级+bean的管理_第9张图片

如果输入java没有反应的话就是jdk的系统变量没有配置好,就去环境变量里面配置java_home还有path下的bin目录和jre目录,另外假如jak版本过高的话是没有jre文件夹的

需要在安装jdk的路径里面的cmd窗口下执行下面的命令生成

bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre 

还有要注意的就是,环境变量里面选择的jdk版本要和项目的jdk版本一致,不然运行不了。

搞定好上面这些之后先直接运行一次

SpringBoot——配置的优先级+bean的管理_第10张图片

这里如果出现如上错误就是端口被占用了

正常运行后如下

SpringBoot——配置的优先级+bean的管理_第11张图片

指定命令行参数和java系统属性后再次运行

java -jar -Dserver.port=9000  springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=10010 

SpringBoot——配置的优先级+bean的管理_第12张图片 常见的五种配置属性的方式

SpringBoot——配置的优先级+bean的管理_第13张图片

 五种配置方式的优先级如下

命令行参数》java系统属性》properties》yml》yaml

bean的管理

获取bean

SpringBoot——配置的优先级+bean的管理_第14张图片

准备好如下的项目结构环境

SpringBoot——配置的优先级+bean的管理_第15张图片 图中的三层架构的三个文件都已经是IOC容器里面的bean对象。

从IOC容器中获取bean对象

要先获取IOC容器对象,这里可以使用@Autowired注解自动注入

使用IOC容器对象的方法,来根据名称获取时获取到的默认是Object类型,要进行类型的强转。

在test目录下

   @Autowired
    private ApplicationContext applicationContext; //IOC容器对象
 
    //获取bean对象
    @Test
    public void testGetBean(){
        //根据bean的名称获取
        DeptController bean1 = (DeptController) applicationContext.getBean("deptController");
        System.out.println(bean1);

        //根据bean的类型获取
        DeptController bean2 = applicationContext.getBean(DeptController.class);
        System.out.println(bean2);

        //根据bean的名称 及 类型获取
        DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);
        System.out.println(bean3);
    }

 默认IOC容器中的bean都是单例,所以都是一样的地址值。SpringBoot——配置的优先级+bean的管理_第16张图片

 bean作用域

要解决上面的单例问题,涉及到bean的作用域, 

SpringBoot——配置的优先级+bean的管理_第17张图片

通过@Scope注解配置作用域 

SpringBoot——配置的优先级+bean的管理_第18张图片

IOC容器中的单例bean对象都是在项目启动的时候直接实例化一次,非单例的都是在调用时才初始化。

这里可以使用一个@Lazy延迟单例对象的初始化,直到第一次使用时才实例化。

第三方bean的配置

通常可以使用component以及它的三个衍生注解就可以声明bean对象。

SpringBoot——配置的优先级+bean的管理_第19张图片 

对于没有办法直接在类上加注解的第三方bean对象,可以声明一个方法返回值为该类,在方法里面new一个,然后在外面加上@Bean注解将该方法的返回值直接交给IOC容器管理。 

SpringBoot——配置的优先级+bean的管理_第20张图片

在一般的bean对象中要想实现依赖注入一般都是直接使用@Autowired直接就行了,

在第三方bean中国要想使用依赖注入可以通过bean对象的方法形参传进去。是spring容器会进行自动装配


@Configuration //配置类
public class CommonConfig {

    //声明第三方bean
    @Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean
          //通过@Bean注解的name/value属性指定bean名称, 如果未指定, 默认是方法名
    public SAXReader reader(DeptService deptService){
        System.out.println(deptService);
        return new SAXReader();
    }

}

 SpringBoot——配置的优先级+bean的管理_第21张图片

 

你可能感兴趣的:(Spring,java,mybatis,spring)