ApplicationContextAware 接口的使用
一、这个接口有什么用?
当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。
二、怎么用?
例如我有一个方法类BeanFactory,这个方法类中需要使用到的ApplicationContext中的某个bean(Car)。
1、因为spring要建立属于自己的容器,就必须要加载自己的配置文件。
这个时候,需要注册ContextLoaderListener或者这个类的子类。
在web.xml加上以下的信息:
<!--ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext.xml的配置信息。-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
当然,这样子的话只会读取默认路径下的application.xml配置文件的。如果需要读取特定路径下的配置文件。需要在web.xml中
添加如下信息。可以参考我的示例,指定配置文件,如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/app-context.xml</param-value>
</context-param>
注意:<param-name>contextConfigLocation</param-name>是不能改变的。
2、方法类BeanFactory的处理
方法类AppUtil实现ApplicationContextAware接口:
public class BeanFactory implements ApplicationContextAware{
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext Context)
throws BeansException {
applicationContext=Context;
}
public Object getBean(String bean){
return applicationContext.getBean(bean);
}
}
为方法类BeanFactory 增加一个静态的成员ApplicationContext类型的对象。以后方法类BeanFactory 获取ApplicationContext,就是通过读取这个
3、在spring的配置文件中,注册方法类BeanFactory
严格上来说,方法类BeanFactory 是一个bean,而且从步骤2中我们不难发现,之所以方法类BeanFactory 能够灵活自如地获取ApplicationContext
就是因为spring能够为我们自动地执行了setApplicationContext。但是,spring不会无缘无故地为某个类执行它的方法的,所以,就很有必要
通过注册方法类BeanFactory 的方式告知spring有这样子一个类的存在。
(加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的
public void setApplicationContext(ApplicationContext context) throws BeansException
方法,获得ApplicationContext对象,ApplicationContext对象是由spring注入的。前提必须在Spring配置文件中指定该类)
其实,方法很简单,就是将方法类beanFactory作为一个普通的bean在spring的配置文件中进行注册:
<bean id="beanFactory" class="factory.BeanFactory"></bean>
上一篇: tensorflow课堂笔记(三)
下一篇: 从多个角度了解HashMap。
推荐阅读
-
很简单的批量小计求和 使用快捷键配合鼠标分秒搞定
-
深入理解Spring的@Order注解和Ordered接口
-
php中的路径问题与set_include_path使用介绍
-
mysql中内存的使用与分配_MySQL
-
[PHP]如何在百度(BAE)和新浪(SAE)的云平台使用PHP连接MySQL并返
-
PHP读取PDF内容(LINUX下XPDF的配置和使用)_PHP教程
-
编写一个函数reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数
-
DB2 Merge Into语句的使用
-
使用xdebug调试PHP 找出PHP程序的瓶颈
-
使用php 获取时间今天明天昨天时间戳的详解_PHP教程