ApplicationContextAware 接口

 一、这个接口有什么用?

当一个类实现了这个接口(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>

 

转载于:https://www.cnblogs.com/ClassNotFoundException/p/6146944.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java之泛型练习

package cn.itcast.generics;import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet;/** 方法一&#xff1a;实现Comparable接口*/ //class Person implements Comparable<Person> {//实现Comparable接口&#xff0c;使得集合元素具备可比较…

ABB 配置文件

配置文件 配置文件是列出系统参数值的文本文件。 注意&#xff1a; 如果该参数指定默认值&#xff0c;那么就不会被列在 配置文件。 控制器中有六个配置区域&#xff0c;配置文件保存为后缀 .CFG文件。 配置文件默认保存在系统文件夹SYSPAR&#xff0c;例如.. \ MySystem\ …

巨杉db

巨杉数据库 and mongo db ,分布式数据库&#xff0c; 转载于:https://www.cnblogs.com/feiyun8616/p/8178116.html

【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)

目录 一、候选框大量重叠问题 1、NMS核心思想 2、 步骤&#xff1a; 3、缺陷 4、改进 1&#xff09;soft NMS——衰减的方式来减小预测框的分类得分 2&#xff09;softer nms——增加了位置置信度 二、样本不平衡问题 1、不平滑的来源&#xff08;3方面&#xff09; 1&a…

忙着,快乐着

无比充实的周末&#xff0c;好久没有这样忙过了&#xff0c;周六早上七点多起床去上考研课&#xff0c;上了整整一天&#xff0c;晚上回到寝室用吃饭的时间让自己放松一下&#xff0c;看了一会儿综艺节目&#xff0c;吃晚饭就开始写这次的代码&#xff0c;写累了就去洗洗睡了&a…

ABB Fronius TPS 4000/5000 IRC5 接口

在RobotStudio生成机器人系统时&#xff0c;选择&#xff1a; Power Source option 650-9 Fronius TPS 4000/5000。Fronius的设备类别和设置被激活。此选项支持福尼斯TPS 4000/5000弧焊电机&#xff0c;包括支持三种焊接模式&#xff1a; 1 Job模式 2 修正的Job模式 …

ASP.NET 实现Base64文件流下载PDF

因为业务需要调用接口获取的是 Base64文件流 需要提供给客户下载PDF文档 源码部分借鉴网上&#xff0c;具体地址忘记了。 //Base64文件流 byte[] buffer Convert.FromBase64String(decodedString); System.IO.Stream iStream new System.IO.MemoryStream(buffer);try{int len…

Viewpager无限循环(首页与尾页平滑过渡)

#Viewpager无限循环(首页与尾页平滑过渡) ##double kill 在网上找了不少的viewpager无限轮播的例子&#xff0c;大部分都是Interger.MAX_VALUES。 滑到最后一页的时候setCurrentItem(0),这样虽然实现了无限轮播&#xff0c;但是当从最后一页跳转到第一页的时候不够优雅。。通过…

【深度学习】——物体检测的难点

目录 一、小物体检测 1、降采样率减小 空洞卷积 2、anchor设计 1&#xff09;统计方法 2&#xff09;anchor边框聚类 3、多尺度训练&#xff08;multi scale training——MST&#xff09; 4、 特征融合 一、小物体检测 在分类任务中&#xff0c;一般物体的大小都差不多&a…

ABB 机器人 通信指令(人机对话):

&#xff08;1&#xff09;清屏指令&#xff1a;TPErase &#xff08;2&#xff09;写屏指令&#xff1a;PWrite String   tring&#xff1a;显示的字符串。(string)在示教器显示屏上显示字符串数据&#xff0c;也可以用“……”形式直接定义字符串&#xff0c;每一个写屏…

hadoop streaming编程小demo(python版)

大数据团队搞数据质量评测。自动化质检和监控平台是用django&#xff0c;MR也是通过python实现的。(后来发现有orc压缩问题&#xff0c;python不知道怎么解决&#xff0c;正在改成java版本) 这里展示一个python编写MR的例子吧。 抄一句话&#xff1a;Hadoop Streaming是Hadoop提…

Asp.net在IE10、IE11下事件丢失经验总结

asp.net4.0出生得比IE10早&#xff0c;所以asp.net4.0以前版本不认识IE10 的 User-Agent 标头&#xff0c;导致的后果就是ASP.NET 特定功能失效&#xff0c;例如&#xff1a;页面报错__doPostBack找不到&#xff0c;不支援 Cookies 功能等等。这属于.net的Bug&#xff0c;微软也…

第6章 循环结构

循环语句: 可以让一部分代码,反复执行 1.1 循环语句while while循环: 编写格式:while(条件){ 循环体 } 条件: 当条件是true,就执行循环体,执行完循环体后 程序再次执行while中的条件,如果条件还是true,继续执行循环体 直到条件是false的时候,循环就结束 public class WhileDem…

【深度学习】——pytorch搭建模型及相关模型

目录 1、搭建模型的流程 1&#xff09;步骤 2&#xff09;完整代码——手写minist数据集为例&#xff08;这里使用的数据集是自带的&#xff09; 2、搭建模型的四种方法 1&#xff09;方法一——利用nn.Sequential&#xff08;&#xff09; 2&#xff09;方法二——利用co…

ABB robot 与 Fronius 设备 IO

ABB robot 与 Fronius 设备 IO

初次使用cocoapods注意事项

在仅仅用cocoapods时可能会遇到各种各样的错误和问题 这里中总结下: 1.首先使用cocoapods有非常多优点,在github上非常多优秀的开源项目都用到了它;假设你不会使用它,那么非常多优秀的开源项目你下载下来了也发现跑不起来,假设发现有Profile,Profile.lock,Pods等cocoapods相关…

MongoDB复制集技术

为什么使用MongogDB复制集技术? mysql中:一主一从&#xff0c;一主多从结构存在的问题 1、 fileover&#xff08;故障转移&#xff09;a) 选主投票b) 切换 2、 是否对就用透明化 3、 数据补偿的问题a) 两阶段数据补偿 4、 解决方法 mysql中使用MHAVIP b…

Linux文件系统的实现 (图文并茂,比较好)

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; Linux文件管理从用户的层面介绍了Linux管理文件的方式。Linux有一个树状结构来组织文件。树的顶端为根目录(/)&#xff0c;节点为目录&#xff0…

【深度学习】——如何处理输入图像大小不一样的情况

这里一般有常见的几种方法&#xff1a; 1&#xff09;将图像缩放成大小一致后再输入&#xff0c;如RCNN算法 2&#xff09;roi pooling&#xff1a;这里允许输入图像的大小不一样&#xff0c;后续根据指定的固定大小来求解池化的核大小&#xff0c;以此来得到相同大小的特征图&…

ROS探索总结(一)——ROS简介

随着机器人领域的快速发展和复杂化&#xff0c;代码的复用性和模块化的需求原来越强烈&#xff0c;而已有的开源机器人系统又不能很好的适应需求。2010年Willow Garage公司发布了开源机器人操作系统ROS&#xff08;robot operating system&#xff09;&#xff0c;很快在机器人…