【Spring IoC容器-ApplicationContext】知识的价值不在于占有,而在于使用。这篇文章主要讲述Spring IoC容器-ApplicationContext相关的知识,希望能为你提供帮助。
ApplicationContext
ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件。
ApplicatonContext类体系结构
文章图片
- ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能,包括容器启动事件、关闭事件等。实现了ApplicationListener事件监听接口的Bean可以接受到容器事件,并对事件进行相应处理。在ApplicationContext抽象实现类AbstracApplicationContext中存在一个ApplicationEventMulticaster,它负责保存所有的监听器,以便在容器产生上下文事件时通知这些事件监听者。
- MessageSource:为应用提供i18n国际化消息访问的功能
- ResourcePatternResolver:所有的ApplicationContext实现类都实现了类似于PathMatchingResourcePatternResolver的功能,可以通过带前缀的Ant风格的资源文件路径装载Spring配置文件。
- LifeCycle:该接口提供了start()和stop()方法,主要用于控制异步过程。
文章图片
ApplicationContext声明周期实例
定义一个MybeanFactoryPostProcessor
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor{@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory bf) throws BeansException {
BeanDefinition bd = bf.getBeanDefinition("animal");
bd.getPropertyValues().addPropertyValue("name", "zhangsan");
System.out.println("调用MyBeanFactoryPostProcessor.postProcessBeanFactory()!");
}
}
MyBeanPostProcessor
public class MyBeanPostProcessor implements BeanPostProcessor{@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if(beanName.equals("animal")){
Animal animal = (Animal)bean;
System.out.println("调用MyBeanPostProcessor.postProcessBeforeInitialization()");
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if(beanName.equals("animal")){
Animal animal = (Animal)bean;
System.out.println("调用MyBeanPostProcessor.postProcessAfterInitialization()");
}return bean;
}
}
<
?xml version="1.0" encoding="UTF-8" ?>
<
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<
bean id="animal" class="com.rookie.bigdata.factory.domain.Animal" destroy-method="myDestory" init-method="myInit">
<
property name="name" value="https://www.songbingjia.com/android/哈士奇">
<
/property>
<
property name="age" value="https://www.songbingjia.com/android/3">
<
/property>
<
/bean>
<
bean id="myBeanPostProcessor" class="com.rookie.bigdata.context.MyBeanPostProcessor"/>
<
bean id="myBeanFactoryPostProcessor" class="com.rookie.bigdata.context.MyBeanFactoryPostProcessor"/>
<
/beans>
public class ApplicationTest {
public static void main(String[] args) throws Exception{
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("context/bean.xml");
Animal animal = (Animal)applicationContext.getBean("animal");
System.out.println(animal);
// animal.destroy();
((ClassPathXmlApplicationContext) applicationContext).close();
}
}
运行上面的实例即可看到ApplicationContext的声明周期的过程。
推荐阅读
- 使用Application Insights监控应用程序性能
- Mapper 文件中SQL不等于的写法
- 在非NDK编译条件下使用Android Log函数
- 安卓记账本开发——图表的使用
- uniapp简易直播
- 宝宝乖 app
- Android Studio学习路程(10)
- oracle 11g未找到文件WFMLRSVCApp.ear文件
- qml-main.cpp中的两种启动Qt Quick App模式