ApplicationContext接口功能(二)
ApplicationContext总共有四个拓展能力,上一节已经讲了国际化的能力。今天主要测试匹配资源通配符的能力以及获取环境配置的能力。
一.资源通配符解析
代码如下:
package com.example.springdemo.demos.a20;import com.example.springdemo.demos.a19.TestFactory;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.DefaultSingletonBeanRegistry;
import org.springframework.boot.DefaultBootstrapContext;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.event.EventPublishingRunListener;
import org.springframework.boot.env.EnvironmentPostProcessorApplicationListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.env.PropertySources;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.core.io.Resource;import javax.swing.*;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Locale;
import java.util.Map;/*** @author zhou* @version 1.0* @description TODO* @date 2025/5/31 14:37*/
@SpringBootApplication
public class TestApplicationContext {public static void main(String[] args) throws IOException {ConfigurableApplicationContext context = SpringApplication.run(TestApplicationContext.class, args);System.out.println(context.getMessage("hi", null, Locale.CHINA));System.out.println(context.getMessage("hi", null, Locale.ENGLISH));System.out.println(context.getMessage("hi", null, Locale.JAPANESE));//资源通配符解析org.springframework.core.io.Resource[] resources = context.getResources("classpath:application.properties");for (Resource resource:resources){System.out.println(resource);}}
}
classpath:application.properties会匹配类路径下的所有的application.properties文件。如果匹配磁盘路径需要使用file:再加上路径。
调用的接口如下:
结果如下:
通过在classpath后面加一个*会在类路径条目中查找所有匹配的资源。(包括jar包)
二.获取环境信息的能力
package com.example.springdemo.demos.a20;import com.example.springdemo.demos.a19.TestFactory;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.DefaultSingletonBeanRegistry;
import org.springframework.boot.DefaultBootstrapContext;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.event.EventPublishingRunListener;
import org.springframework.boot.env.EnvironmentPostProcessorApplicationListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.env.PropertySources;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.core.io.Resource;import javax.swing.*;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Locale;
import java.util.Map;/*** @author zhou* @version 1.0* @description TODO* @date 2025/5/31 14:37*/
@SpringBootApplication
public class TestApplicationContext {public static void main(String[] args) throws IOException {ConfigurableApplicationContext context = SpringApplication.run(TestApplicationContext.class, args);System.out.println(context.getMessage("hi", null, Locale.CHINA));System.out.println(context.getMessage("hi", null, Locale.ENGLISH));System.out.println(context.getMessage("hi", null, Locale.JAPANESE));//资源通配符解析org.springframework.core.io.Resource[] resources = context.getResources("classpath*:META-INF/spring.factories");for (Resource resource:resources){System.out.println(resource);}//环境信息配置(来源有多个,系统环境变量,properties文件)System.out.println(context.getEnvironment().getProperty("java_home"));System.out.println(context.getEnvironment().getProperty("server.port"));}
}
通过下面方法可以获取各种来源配置的环境信息,例如系统环境变量或者配置文件。其中键的值可以忽略大小写,系统环境变量配置的JAVA_HOME,但是传入java_home也行。
context.getEnvironment().getProperty()
对应的接口:
结果输出: