IDEA中双击shift,搜索一切
使用ctrl + f12打开当前文件的结构图,显示了当前文件的层次结构,包括类、方法、变量等。
BeanFactory接口功能
- 表面上只有getBean
- 实际上IOC、DI、以及Bean的生命周期的各种功能,都有其实现类(DefaultListableBeanFactory)提供
ApplicationContext接口功能
上述图中可以看出ApplicationContext接口相对于父接口BeanFactory接口多了一些功能
-
国际化支持(MessageSource):ApplicationContext提供了国际化的支持,可以方便地进行多语言的处理。它可以根据不同的语言环境加载对应的资源文件,并根据需要进行国际化的文本翻译。
-
ConfigurableApplicationContext context = SpringApplication.run(TliasApplication.class, args); System.out.println(context.getMessage("hi", null, Locale.CHINA)); System.out.println(context.getMessage("hi", null, Locale.JAPAN)); System.out.println(context.getMessage("hi", null, Locale.ENGLISH));
-
-
事件发布与监听(ApplicationEventPublisher):ApplicationContext支持事件的发布与监听机制。它可以发布应用程序中的各种事件,同时也可以注册监听器来监听这些事件。这样可以实现应用程序中不同模块之间的解耦,通过事件的发布与监听来实现模块间的通信与交互。
-
首先的定义一个事件继承父类
-
package com.example; import org.springframework.context.ApplicationEvent; public class UserRegisteredEvent extends ApplicationEvent { public UserRegisteredEvent(Object source) { super(source); } }
-
-
发送事件
-
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args); context.publishEvent(new UserRegisteredEvent(context));
-
-
接受事件
-
package com.example; import org.springframework.context.event.EventListener; public class Component01 { @EventListener public void Listener01(UserRegisteredEvent userRegisteredEvent) { System.out.println(userRegisteredEvent); } }
-
-
-
资源加载(ResourceLoader):ApplicationContext可以加载多种类型的资源,如文件系统、类路径、URL等。它提供了方便的资源加载方法,可以加载配置文件、模板文件、图片等各种资源。
-
ConfigurableApplicationContext context = SpringApplication.run(TliasApplication.class, args); Resource[] resources = (Resource[]) context.getResources("classpath*:META-INF/spring.factories"); for (Resource resource : resources) { System.out.println(resource); }
-
-
获取配置信息(EnvironmentCapable)
-
ConfigurableApplicationContext context = SpringApplication.run(TliasApplication.class, args); System.out.println(context.getEnvironment().getProperty("java_home"));
-
小结
- BeanFactory和ApplicationContext并不是简单接口继承的关系,ApplicationContext组合扩展了BeanFactory的功能
- ApplicationContext接口中的发送事件是一种新的代码之间解耦的方式。