本文先介绍一下ApplicationContext
主要类图
1)beanFactory 2)4个扩展功能
MessageSource:国际化语言
public static void main(String[] args) throws IOException {
ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);
// 多语言 失败!!!
String message1 = context.getMessage("hello", null, new Locale("zh", "CN"));
String message2 = context.getMessage("hello", null, new Locale("en", "US"));
System.out.println(message1);
System.out.println(message2);
}
ResourcePatternResolver:根据正则表达式获取资源路径
@SpringBootApplication
public class Main {
public static void main(String[] args) throws IOException {
ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);
Resource[] resources = context.getResources("classpath:messages_en.properties");
for (Resource resource : resources) {
System.out.println(resource);
}
}
}
从结果上看,已经获取到资源了!
ApplicationEventPublisher:获取环境变量
ConfigurableEnvironment environment = context.getEnvironment();
String property = environment.getProperty("server.port");
System.out.println(property);
ApplicationEventPublisher:事件
public static void main(String[] args) throws IOException {
ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);
// 发出事件
context.publishEvent(new MyEvent("123232"));
}
// 继承 ApplicationEvent 的自定义事件
public class MyEvent extends ApplicationEvent {
public MyEvent(Object source) {
super(source);
}
}
// 监听事件
@Component
public class Listener {
@EventListener
public void onApplicationEvent(MyEvent event) {
System.out.println("收到事件:" + event.getSource());
}
}
总结,ApplicationContext继承了多个类,也就是获得了多个类的功能,而且,上述的四个其他能力也比较实用。其中,国际化是海外项目或者大型项目用得比较多的功能,spring boot项目启动时也能获取环境变量并打印,而事件运用的就更加广泛了。
------------------关注--------------------------------------------------评论----------------------------