第九章:Spring Bean生命週期(Bean Lifecycle)
Spring Bean 元信息配置階段
- BeanDefinition 配置
- 面向資源
- XML 配置
- Properties 資源配置
- 面向註解
- 面向 API
- 面向資源
- Properties 資源配置
user.(class) = org.geekbang.thinking.in.spring.ioc.overview.domain.User
user.id = 001
user.name = 小馬哥
user.city = HANGZHOU
public class BeanMetadataConfigurationDemo {
public static void main(String[] args) {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
// 實例化基於 Properties 資源 BeanDefinitionReader
PropertiesBeanDefinitionReader beanDefinitionReader = new PropertiesBeanDefinitionReader(beanFactory);
String location = "META-INF/user.properties";
// 基於 ClassPath 加載 properties 資源
Resource resource = new ClassPathResource(location);
// 指定字符編碼 UTF-8
EncodedResource encodedResource = new EncodedResource(resource, "UTF-8");
int beanNumbers = beanDefinitionReader.loadBeanDefinitions(encodedResource);
System.out.println("已加載 BeanDefinition 數量:" + beanNumbers);
// 通過 Bean Id 和類型進行依賴查找
User user = beanFactory.getBean("user", User.class);
System.out.println(user);
}
}
Spring Bean 元信息解析階段
- 面向資源 BeanDefinition 解析
- BeanDefinitionReader
- XML 解析器 - BeanDefinitionParser
- 面向註解 BeanDefinition 解析
- AnnotationBeanDefinitionReader
Spring Bean 註冊階段
Spring BeanDefinition 合併階段