SpringContextHolder 静态持有SpringContext的引用

SpringContextHolder 静态持有SpringContext的引用 

package com.test.quartz;import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;/**** 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.* @author zhuh* */public class SpringContextHolder implements ApplicationContextAware {private static ApplicationContext applicationContext;// 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.public void setApplicationContext(ApplicationContext applicationContext) {SpringContextHolder.applicationContext = applicationContext;}// 取得存储在静态变量中的ApplicationContext.public static ApplicationContext getApplicationContext() {checkApplicationContext();return applicationContext;}// 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.@SuppressWarnings("unchecked")public static <T> T getBean(String name) {checkApplicationContext();return (T) applicationContext.getBean(name);}// 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.// 如果有多个Bean符合Class, 取出第一个.@SuppressWarnings("unchecked")public static <T> T getBean(Class<T> clazz) {checkApplicationContext();return (T) applicationContext.getBeansOfType(clazz);}private static void checkApplicationContext() {if (applicationContext == null) {throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");}}}

<!-- 用于持有ApplicationContext,可以使用SpringContextHolder.getBean('xxxx')的静态方法得到spring bean对象 --> 

<bean class="com.xxxxx.SpringContextHolder"  />

该工具类主要用于:那些没有归入spring框架管理的类却要调用spring容器中的bean提供的工具类。

在spring中要通过IOC依赖注入来取得对应的对象,但是该类通过实现ApplicationContextAware接口,以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.

如此就不能说说org.springframework.context.ApplicationContextAware这个接口了:

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

除了以上SpringContextHolder类之外,还有不需要多次加载spring配置文件就可以取得bean的类:
 

1.Struts2框架中,在监听器中有这么一句

ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());

之后可以用

scheduleService = (IScheduleService)context.getBean("scheduleService");

取到对象,请问context都可以取到什么信息,这些信息的来源在哪?是XML里配置了呢,还是固定的一部分信息呢?
2、这个 application封装的是web.xml 内部的信息
而你的web.xml里面有spring的配置文件,所有,里面还包含spring的信息
同样包含struts2的filter信息
总之就是和web.xml有关系的所有信息

3、在web.xml里有这么一段

    <context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext*.xml</param-value></context-param>

 那么在取信息的时候,也会把applicationContext.xml里的信息取出来

使用方式

/*** Hello world!*/
public class App {public static void main(String[] args) {System.out.println("加载spring");ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "classpath:spring/spring-context.xml"});context.start();SpringContextHolder springContextHolder = new SpringContextHolder();springContextHolder.setApplicationContext(context);//SpringContextHolder.getBean("queryDealService");System.out.println("Hello World!");}
}

转载于:https://www.cnblogs.com/molashaonian/p/8569920.html

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

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

相关文章

canvas绘制图像image

canvas绘制图像image 1.image的三个script的基本语法 准备工作:1.定义画布长度&#xff0c;获取2D绘图环境 ​ 2.建立对面对象&#xff0c;设置图片路径 ​ 3.载入图片&#xff0c;开始绘制 a.简单的画布上根据坐标绘制 ctx.drawImage(img,x,y) img为要绘制的图像&#…

根据时间戳生成编号_分布式系统的唯一ID生成算法对比

在复杂分布式系统中&#xff0c;往往需要对大量的数据和消息进行唯一标识。那么如何实现全局唯一id呢&#xff1f;有以下几种方案。(1)方案一&#xff1a;独立数据库自增id这个方案就是说你的系统每次要生成一个id&#xff0c;都是往一个独立库的一个独立表里插入一条没什么业务…

Ubuntu上安装Samba服务器实现家庭共享

如何在Ubuntu上安装Samba服务器 大多数Linux发行版都包含Samba。 要在Ubuntu上安装Samba&#xff0c;只需运行&#xff1a; sudo apt install samba 要检查您的Samba版本&#xff0c;请运行 sudo smbstatus 或者 sudo smbd --version 输出格式如下&#xff1a; Samba version …

解决使用Servlet输出乱码问题(一行代码解决一切)

使用servlet接收表单数据后&#xff0c;输出出现了乱码&#xff0c;如下: 解决方法: 将下面这行代码粘到你重写的doGet或者doPost方法里就可以了。 response.setContentType("text/html;charsetutf-8");

利用一维数组求菲波那契数列前40项的和并输出结果。_[W2D2]斐波那契数列

题目链接&#xff1a;斐波那契数列 - 题目 - 青藤 OJ题目来源&#xff1a;经典题题目大意输入 &#xff0c;输出 0&#xff0c;1 开头的斐波那契数列的第 n 项。这里我们不讨论递推方法&#xff0c;我们采用这道简单的题目简单说一下记忆化搜索相关内容。解法首先&#xff0c;基…

Python网络编程(1)-socket

我会在近期尽快更新好之前写的博客&#xff0c;会添加新的知识点和注意问题&#xff0c;排版和内容都会较之前有很大的改观&#xff0c;感谢大家一直的支持&#xff01; 1、 客户端/服务器架构 客户端/服务器架构也称主从式架构&#xff0c;简称C/S架构&#xff0c;它是一种网络…

Canvas之进度条的制作(矩形,圆环)

Canvas之进度条的绘制 基本进度条的绘制 1.矩形进度条 关键语法 获取画笔 var ctxdocument.getElementById(“id”).getContext(“2d”); 填充颜色 ctx.fillStytle“color”; setInternal()和clearInternal()的使用 代码(两种类型): <!DOCTYPE html> <html>…

该文件没有与之关联的程序来执行该操作_Liunx tty子系统分析之三 tty字符设备文件操作接口说明...

本章主要介绍tty字符设备文件对应的操作接口&#xff0c;从而说明tty设备的数据打开、关闭、读、写等接口的实现等内容。tyy file_operations定义tty字符设备文件操作接口的定义如下&#xff0c;主要包括tty_fops、console_fops、hung_up_tty_fops&#xff0c;其中console_fops…

jboss安装

找到压缩包 打开eclipse help 倒数第三个 找到hibernate.tools 转载于:https://www.cnblogs.com/xusongfeng/p/8473311.html

初学echart的简单使用

简单的echart使用方法 1.引入外部echart的js文件 <script type"text/javascript" src"js/echarts.min.js"></script> 2.建立放置容器&#xff0c;div使用放置容器布局 放置容器配置 <style>body {text-align: center;}#domain1 {widt…

如何编写一个python项目

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397616003925a3d157284cd24bc0952d6c4a7c9d8c55000 实战Day 1 - 搭建开发环境Day 2 - 编写数据库模块Day 3 - 编写ORMDay 4 - 编写ModelDay 5 - 编写Web框架Day 6 - 添加配置文件Day …

列名 userid 不明确。 表结构_那些你不知道的表结构设计思路

ERP表结构的设计--第9篇用日志记录“开源软件”的诞生赤龙ERP开源地址&#xff1a;点亮星标&#xff0c;感谢支持&#xff0c;与开发者交流 kzca2000码云&#xff1a;https://gitee.com/redragon/redragon-erpGitHub&#xff1a;https://github.com/redragon1985/redragon-erp赤…

echart的进阶使用(option)

echart的option进阶使用 1.title: { text: 折线图堆叠subtext: 有一定误差,left: center }title用来配置标题 subtext:副标题 left:位置 2.tooltip: { trigger: axis }图标的提示框组件 trigger&#xff08;触发方式&#xff09;:axis(坐标轴) item(数据项) 3.legend: {…

python找人_python之找最后一个人

题目大概是:有10个人围成一圈&#xff0c;从第一个人数&#xff0c;数到3的人出局&#xff0c;问最后一个人是谁?围成一圈&#xff0c;那就是无限循环&#xff0c;直至最后一个人&#xff0c;我们可以把10个人看做一个列表&#xff0c;每循环一次就把除3为0的数去除&#xff0…

PCL—关键点检测(rangeImage)低层次点云处理

博客转载自&#xff1a;http://www.cnblogs.com/ironstark/p/5046479.html 关键点又称为感兴趣的点&#xff0c;是低层次视觉通往高层次视觉的捷径&#xff0c;抑或是高层次感知对低层次处理手段的妥协。 ——三维视觉关键点检测 1.关键点&#xff0c;线&#xff0c;面 关键点 …

lombok的使用三部曲及使用中遇到的问题(持续更新)

lombok的使用 1.安装lombok插件 工欲善其事&#xff0c;必先利其器&#xff08;这一点是不能忘记的&#xff0c;好多小伙伴可能只导入了依赖&#xff0c;却忘了去下载安装插件&#xff09; 2.导入lombok依赖&#xff0c;看准了千万别倒错 导入依赖&#xff0c;记得更新PoM文件…

python gui 自动化_python GUI测试自动化

#! /usr/bin/env python#codingGB18030GUI测试自动化语言:python模块&#xff1a;pywinauto环境&#xff1a;windows7中文、python-2.6_32bit、pywinauto-0.40、SendKeys-0.3FuncName: pywinauto_notepad.pyDesc: study pywinautoDate: 2017-4-10 10:30Author: 雷小莫_codeHome…

Spring的使用——基础环境搭建以及IOC概念理解(持续更新)

spring基础环境搭建 1.添加Spring依赖 2.编写一个Spring的配置文件 3.通过Spring的应用程序应用上下文获取对象 优点:在修改方案时可以不用修改代码&#xff0c;只需修改配置文件的bean就可以。 spring的基本测试过程 1.获取上下文对象ctx ApplicationContext ctxnew Cl…

Windows10搭建FTP服务器

https://www.cnblogs.com/zjiacun/p/6868457.html 转载于:https://www.cnblogs.com/jonathanyue/p/9301195.html

详细设计说明书示例_专利说明书常用句型汇总

第六课 说明书常用句型1. 以上一般描述和以下的详细说明都只是本发明的示例&#xff0c;并旨在提供概况或框架&#xff0c;用来理解如本发明所主张的本发明的本质和特征。It is to be understood that both the foregoing general description and the following detailed desc…