bootstrap.yml与application.yml执行顺序(原因:类加载器的先后顺序)
bootstrap.yml与application.yml执行顺序
结论:bootstrap.yml 先于 application.yml 加载
bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等
application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。
bootstrap.yml 先于 application.yml 加载
应用:当使用 Spring Cloud Config Server 的时候
bootstrap.yml 中
spring.application.name: test
spring.cloud.config.name: testName
spring.cloud.config.uri: http://config1.spring-demo.test.com:8888
原因:类加载器的先后顺序
负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定
虚拟机自带的加载器
1.启动类加载器(Bootstrap)C++
2.扩展类加载器(Extension)Java
3.应用程序类加载器(AppClassLoader)Java
也叫系统类加载器,加载当前应用的classpath的所有类
4.用户自定义加载器 Java.lang.ClassLoader的子类,用户可以定制类的加载方式
注意;java中反射的三种方法:
1.通过Object类的getClass方法来获取
java.lang.Object中定义有getClass方法:public final Class getClass()
所有Java对象都具备这个方法,该方法用于返回调用该方法的对象的所属类关联的Class对
2.用.class的方式
使用类名加“.class”的方式即会返回与该类对应的Class对象。
3.使用Class.forName方法
Class有一个著名的static方法forName:public static Class forName(String className) throws ClassNotFoundException
该方法可以根据字符串参数所指定的类名获取与该类关联的Class对象。如果该类还没有被装入,该方法会将该类装入JVM。
该方法声明抛出ClassNotFoundException异常。顾名思义,当该方法无法获取需要装入的类时(例如,在当前类路径中不存在这个类),就会抛出这个异常。