Spring 容器初始化过程主要涉及 register 和 refresh 两个方法:
- register 方法:用于注册 beanDefinition,即将描述 bean 的元数据信息注册到 Spring 容器中,以便 Spring 在程序运行时能够根据这些元数据创建出 bean 对象。
register 方法主要涉及到两个重要的组件:
- BeanDefinitionRegistry:用于注册 beanDefinition 的接口。
-
BeanDefinitionReader:用于解析 beanDefinition 元数据的读取器。
-
refresh 方法:用于初始化 Spring 容器,即根据所注册的元数据信息创建出 bean 实例对象,并将其放置到对应的 beanFactory 中。
refresh 方法主要涉及到两个重要的组件:
- BeanFactory:用于保存 bean 实例对象的工厂类。
- BeanDefinition:描述 bean 实例的元数据信息。
下面是具体的实现步骤:
- 创建一个空的 ApplicationContext 对象(Spring 的上下文对象);
// 创建一个空的 AnnotationConfigApplicationContext 容器对象
ApplicationContext context = new AnnotationConfigApplicationContext();
- 获取容器注册中心对象实例;
// 获取容器注册中心对象实例
BeanDefinitionRegistry registry = ((AnnotationConfigApplicationContext) context).getBeanFactory();
- 通过 BeanDefinitionReader 对象的 loadBeanDefinitions() 方法将 bean 的元数据信息注册到容器注册中心对象中;
// 创建一个 BeanDefinitionReader 对象实例
BeanDefinitionReader reader = new XmlBeanDefinitionReader(registry);
// 注册 bean 的元数据信息到容器注册中心对象
reader.loadBeanDefinitions("classpath:beans.xml");
- 调用容器对象的 refresh() 方法进行容器初始化;
// 刷新容器
((AnnotationConfigApplicationContext) context).refresh();
- 调用容器对象的 getBean() 方法获取对应的 bean 实例对象并使用;
// 获取对应的 bean 实例对象并使用
MyBean bean = context.getBean(MyBean.class);
bean.doSomething();
示例一:
// 创建容器对象
ApplicationContext context = new AnnotationConfigApplicationContext();
// 获取容器注册中心对象
BeanDefinitionRegistry registry = ((AnnotationConfigApplicationContext) context).getBeanFactory();
// 创建一个 BeanDefinitionReader 对象实例
BeanDefinitionReader reader = new XmlBeanDefinitionReader(registry);
// 注册 bean 的元数据信息到容器注册中心对象
reader.loadBeanDefinitions("classpath:beans.xml");
// 刷新容器
((AnnotationConfigApplicationContext) context).refresh();
// 获取对应的 bean 实例对象并使用
MyBean bean = context.getBean(MyBean.class);
bean.doSomething();
示例二:
// 创建一个具有注册中心功能的容器对象
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
// 注册 bean 的元数据信息到容器注册中心对象
context.setConfigLocation("classpath:beans.xml");
// 刷新容器
context.refresh();
// 获取对应的 bean 实例对象并使用
MyBean bean = context.getBean(MyBean.class);
bean.doSomething();
上面两个示例均展示了如何使用 Spring 容器初始化 register 与 refresh 方法来创建 bean 实例对象并使用的过程。其中直接创建注册中心对象或者使用具有注册中心功能的容器对象进行注册均可,具体实现方法略有不同。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring 容器初始化 register 与 refresh方法 - Python技术站