一、这个接口有什么用?

当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。

二、怎么用?

举个例子吧:

例如我有一个方法类AppUtil,这个方法类中需要使用到的ApplicationContext中的某个bean(companyService)。

1、因为spring要建立属于自己的容器,就必须要加载自己的配置文件。

这个时候,需要注册ContextLoaderListener或者这个类的子类。

在web.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、方法类AppUtil的处理

方法类AppUtil实现ApplicationContextAware接口:

public class AppUtil implements ApplicationContextAware

为方法类AppUtil增加一个静态的成员ApplicationContext类型的对象。以后方法类AppUtil获取ApplicationContext,就是通过读取这个

成员变量的。具体如下所示:

private static ApplicationContext appContext;

实现ApplicationContextAware接口的默认方法:

public void setApplicationContext(ApplicationContext paramApplicationContext) throws BeansException {appContext = paramApplicationContext;
}

3、在spring的配置文件中,注册方法类AppUtil

严格上来说,方法类AppUtil是一个bean,而且从步骤2中我们不难发现,之所以方法类AppUtil能够灵活自如地获取ApplicationContext

就是因为spring能够为我们自动地执行了setApplicationContext。但是,spring不会无缘无故地为某个类执行它的方法的,所以,就很有必要

通过注册方法类AppUtil的方式告知spring有这样子一个类的存在。

其实,方法很简单,就是将方法类AppUtil作为一个普通的bean在spring的配置文件中进行注册:

<bean id="appUtil" class="com.htsoft.core.util.AppUtil"/>

4、使用静态的成员ApplicationContext类型的对象,appContext,来调用其他bean。在方法类AppUtil中增加如下方法:

public static Object getBean(String paramString) {return appContext.getBean(paramString);
}

那么,在方法类AppUtil中就能够灵活地调用其他任何一个bean了,例如:

CompanyService localCompanyService = (CompanyService)getBean("companyService");

注:配置文件中关于companyService的内容:

<bean id="companyService" class="com.kaiwii.service.system.impl.CompanyServiceImpl"><constructor-arg index="0" ref="companyDao"/>
</bean>

ApplicationContextAware 接口相关推荐

  1. ApplicationContextAware接口的拓展和使用

    ApplicationContextAware接口只有一个方法: public interface ApplicationContextAware extends Aware {void setApp ...

  2. Spring之ApplicationContextAware接口详解

    在Spring中,当一个bean实现了ApplicationContextAware接口,这个bean便可以获取到ApplicationContext对象,进而获取应用上下文中的bean. 代码实例 ...

  3. ApplicationContextAware接口的作用

    前言 在我们开发Spring项目时,不管是使用别人的开源框架,还是使用自己公司框架,或者是自己搭建框架的时候,会见到ApplicationContextAware这个接口,可能最常见的是如下代码 pu ...

  4. 通过ApplicationContextAware加载Spring上下文环境

    项目用到了ApplicationContextAware,通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationContex ...

  5. Spring 之常用接口

    1.ApplicationContextAware 任何期望在ApplicationContext运行的时候被通知到都可以实现该接口 /*** 测试Spring ApplicationContextA ...

  6. Spring-方法注入lookup、方法替换MethodReplacer接口

    问题 lookup方法注入 概述 实例 方法一 通过在配置文件中配置的方式实现 方法二 通过实现接口代码的方式实现 小结 方法替换MethodReplacer接口 概述 实例 小结 总结 问题 无状态 ...

  7. Spring8:一些常用的Spring Bean扩展接口

    前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...

  8. 框架:Spring之Aware相关接口

    一.Aware相关接口 对于应用程序来说,应该尽量减少对Sping Api的耦合程度,然而有些时候为了运用Spring所提供的一些功能,有必要让Bean了解Spring容器对其进行管理的细节信息,如让 ...

  9. springboot中接口实例化_疫情爆发在家闲出屁的我,梳理一下SpringBoot知识点

    在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架.或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用.因而Spring Boot应用本质上就是一个基于Sp ...

最新文章

  1. J2EE持久层持久化上下文传播总结(续)
  2. 工程管理专业就业前景_网络工程师就业前景如何?
  3. js基础语法知识(数组/对象/日期)
  4. Nginx和uWSGI和Flask的关系
  5. mysql 函数重载_C#方法重载(函数重载)
  6. 【Linux】一步一步学Linux——whatis命令(14)
  7. STM32F1如何切换到不同的型号
  8. java 监听本地端口_JAVA本地监听与远程端口扫描
  9. 在Docker中部署Asp.net core2.1以及修改发布
  10. 星地融合→→→6G移动通信关键技术的未来
  11. 网站微端服务器,微端服务器
  12. Spark on Yarn遇到的几个问题
  13. JSP页面中taglib的uri设置
  14. Too many open files故障解决一例
  15. 2-14-Multiple Exemplars-based Hallucination for Face Super-resolution and Editing(ACCV2020)
  16. android+主流品牌手机,10大手机品牌共建Android联军 代表机型一览
  17. win10自带Groove音乐不能播放CUE和APE文件的一种曲线救国办法,自己创建aimppack插件包,AIMP安装DSP插件
  18. 基于javaweb的水果店商城超市系统(java+ssm+jsp+ajax+jquery+mysql)
  19. kickstart自动化系统安装_利用Kickstart自动化安装CentOS的教程
  20. rpmbuild 制作 rpm 安装包 (一)

热门文章

  1. 如何将mysql卸载干净
  2. BS-GX-016基于SSM实现教材管理系统
  3. 有这一篇机器学习全够了
  4. JavaScript学习一
  5. JAVA(利用jsp+javabean+servlet)实现简易计算器
  6. swift处理网络返回数据(封装)
  7. Cognos配置oracle类型内容库时报错
  8. C++回调函数用法(zz)
  9. 混合模式单点登录的实现
  10. 远程登录linux进程的状态_Linux实操篇 - 远程登录到Linux系统