BeanFactory:
它是ApplicationContext的父接口,它才是 Spring 的核心容器, 主要的 ApplicationContext 实现都【组合】了它的功能
BeanFactory能干点啥:
- 表面上只有 getBean
- 实际上控制反转、基本的依赖注入、直至 Bean 的生命周期的各种功能, 都由它的实现类提供
结构关系
DefaultListableBeanFactory结构关系:
- **MessageSource:**处理国际化资源
- ResourcePatternResolver: 通配符匹配资源
- **EnvironmentCapable:**环境信息(环境变量)
- ApplicationEventPublisher: 发布事件
MessageSource (I18n)
public class I18NTest {
@Autowired
private ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
@BeforeEach
public void init() {
messageSource.setBasename("i18n/message");
messageSource.setDefaultEncoding("UTF-8");
}
@Test
void test() {
String key = "hi";
String us = messageSource.getMessage(key, null, Locale.US);
String japan = messageSource.getMessage(key, null, Locale.JAPAN);
System.out.println(us);
System.out.println(japan);
}
}
ResourcePatternResolver和EnvironmentCapable
public class A01 {
public static void main(String[] args) throws IOException {
ConfigurableApplicationContext context = SpringApplication.run(A01.class, args);
/*
1. 到底什么是 BeanFactory
- 它是 ApplicationContext 的父接口
- 它才是 Spring 的核心容器, 主要的 ApplicationContext 实现都【组合】了它的功能
*/
System.out.println(context);
Resource[] resources = context.getResources("classpath*:META_INF/spring.factories");
for (Resource resource : resources) {
System.out.println(resource);
}
System.out.println(context.getEnvironment().getProperty("java_home"));
System.out.println(context.getEnvironment().getProperty("server.port"));
}
}