我们经常需要获取各种 bean , 需要用到 context。

下面的类可以方便的使用 context , 获取 bean 等。

import java.io.File;
import java.util.ArrayList;
import java.util.List; import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; /**
* 单例上下文对象,配合 spring 使用, 用于获取 Bean
* @author YangYxd
* @see 在配置中(applicationContext.xml) 加入
* <bean id="SpringApplicationContext" class="包名.ContextHelper"></bean>
*/
public class ContextHelper implements ApplicationContextAware {
private static String XMLName = "applicationContext.xml";
private static ApplicationContext applicationContext = null; private static class ApplicationContextHolder { // 初始化 Context, 尝试搜索常用的存放 ApplicationContext.xml 的位置
public static ApplicationContext Init() {
ApplicationContext context = null;
try {
context = new ClassPathXmlApplicationContext(XMLName);
} catch (Exception e) {}
// 在当前项目中搜索配置文件
if (context == null) {
try {
String fileName = findFile(System.getProperty("user.dir"), XMLName);
if (fileName != null)
context = new FileSystemXmlApplicationContext(fileName);
} catch (Exception e) {}
}
return context;
} } // 私有化的构造方法,保证外部的类不能通过构造器来实例化。
private ContextHelper() {} /** 设定 XML 名称 */
synchronized public static void setXmlName(String name) {
XMLName = name;
} // 获取单例对象实例
synchronized public static ApplicationContext getInstance() {
if (applicationContext != null)
return applicationContext;
applicationContext = ApplicationContextHolder.Init();
return applicationContext;
} /**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
* @param name
* @return boolean
*/
public static boolean containsBean(String name) {
return getInstance().containsBean(name);
} /**
* @param name
* @return Class 注册对象的类型
*/
public static Class<?> getType(String name) {
try {
return getInstance().getType(name);
} catch (Exception e) {
return null;
}
} /**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
* @param name
* @return
*/
public static String[] getAliases(String name) {
try {
return getInstance().getAliases(name);
} catch (Exception e) {
return null;
}
} /**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
* 如果与给定名字相应的bean定义没有被找到,也会返回 false
* @param name
* @return boolean
*/
public static boolean isSingleton(String name) {
try {
return getInstance().isSingleton(name);
} catch (Exception e) {
return false;
}
} @SuppressWarnings("static-access")
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
System.out.println("ApplicationContextHelper setApplicationContext OK.");
} /**
* 查找文件
* @param baseDirName 查找的文件夹路径
* @param targetFileName 需要查找的文件名
*/
public static String findFile(String baseDirName, String targetFileName) {
List<File> files = new ArrayList<File>();
findFiles(baseDirName, targetFileName, files, true);
if (files.isEmpty())
return null;
return files.get(0).getPath();
} /**
* 递归查找文件
* @param baseDirName 查找的文件夹路径
* @param targetFileName 需要查找的文件名
* @param fileList 查找到的文件集合
* @param onlyFirst 是否是查找第一个
*/
public static void findFiles(String baseDirName, String targetFileName, List<File> fileList, Boolean onlyFirst) { File baseDir = new File(baseDirName); // 创建一个File对象
if (!baseDir.exists() || !baseDir.isDirectory()) { // 判断目录是否存在
System.out.println("文件查找失败:" + baseDirName + "不是一个目录!");
}
String tempName = null;
//判断目录是否存在
File tempFile;
File[] files = baseDir.listFiles();
for (int i = 0; i < files.length; i++) {
tempFile = files[i];
if(tempFile.isDirectory()){
findFiles(tempFile.getAbsolutePath(), targetFileName, fileList, onlyFirst);
}else if(tempFile.isFile()){
tempName = tempFile.getName();
if (tempName != null && tempName.equalsIgnoreCase(targetFileName)) {
// 匹配成功,将文件名添加到结果集
fileList.add(tempFile.getAbsoluteFile());
if (onlyFirst)
return;
}
}
}
} /**
* 获取 Bean
* @param beanName
* @return
*/
@SuppressWarnings("unchecked")
public static <T extends Object> T getBean(String beanName) {
try {
return (T)getInstance().getBean(beanName);
} catch (BeansException e) {
e.printStackTrace();
return null;
}
} /**
* 获取 Bean
* @param beanName
* @param clazz
* @return
*/
public static <T extends Object> T getBean(String beanName , Class<T>clazz) {
return getInstance().getBean(beanName , clazz);
} /**
* @param clazz 通过类模板获取该类
* @return 该类的实例,默认单例
*/
public static <T extends Object> T getBean(Class<T> clazz){
try {
return getInstance().getBean(clazz);
} catch (BeansException e) {
e.printStackTrace();
return null;
}
} }

在单元测试中使用:

package com.yxd.example.bean;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.springframework.test.context.ContextConfiguration; @RunWith(BlockJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:applicationContext.xml"})
public class SpringTest { @Test
public void enumBeans() {
//获取spring装配的bean个数
int beanCount = ContextHelper.getInstance().getBeanDefinitionNames().length;
//逐个打印出spring自动装配的bean。根据我的测试,类名第一个字母小写即bean的名字
for(int i=0; i<beanCount; i++){
System.out.println(ContextHelper.getInstance().getBeanDefinitionNames()[i]);
}
}
}

在这个测试类中,加入ContextConfiguration注解后,会自动加载配置文件。

[Java] ApplicationContext 辅助类的更多相关文章

  1. Java并发辅助类的使用

    目录 1.概述 2.CountdownLatch 2-1.构造方法 2-2.重要方法 2-3.使用示例 3.CyclicBarrier 3-1.构造方法 3-2.使用示例 4.Semaphore 4- ...

  2. 第65节:Java后端的学习之Spring基础

    Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...

  3. 【Spring】浅析Spring框架的搭建

    c目录结构: // contents structure [-] Spring是什么 搭建Spring框架 简单Demo 1,建立User类 2,建立Test类 3,建立ApplicationCont ...

  4. Spring学习笔记 1. 尚硅谷_佟刚_Spring_HelloWorld

    1,准备工作 (1)安装spring插件 搜索https://spring.io/tools/sts/all就可以下载最新的版本 下载之后不用解压,使用Eclipse进行安装.在菜单栏最右面的Help ...

  5. Spring学习进阶(二)Spring IoC

    在使用Spring所提供的各种丰富而神奇的功能之前,必须在Spring IoC容器中装配好Bean,并建立Bean与Bean之间的关联关系.控制反转(Inverser of Control ioc)是 ...

  6. spring学习起步

    1.搭载环境 去spring官网下载这几个包,其中commons-logging-1.2.jar是一个日志包,是spring所依赖的包,可以到apache官网上下载 也可以访问http://downl ...

  7. Spring源码阅读-spring启动

    web.xml web.xml中的spring容器配置 <listener> <listener-class>org.springframework.web.context.C ...

  8. 实战 PureMVC

    最近看PureMVC,在IBM开发者社区发现此文,对PureMVC的讲解清晰简洁,看了可快速入门.另外,<腾讯桌球>游戏的开发者吴秦,也曾进一步剖析PureMVC,可结合看加深理解. 引言 ...

  9. spring的配置与使用

    spring的配置与使用 一.Spring介绍 1. 什么是Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由 RodJohnson 在其著 ...

随机推荐

  1. Eos开发——构造查询条件

    1.ajax 方式 var data = { orgid :orgid,year:year ,month: month,type:type,sortField:'sellEmpname' ,sortO ...

  2. (转)NIO与AIO,同步/异步,阻塞/非阻塞

    原文地址: http://www.cnblogs.com/enjoy-ourselves/p/3793771.html 1.flip(),compact(),与clear()的使用 flip()内部实 ...

  3. PHP核心技术与最佳实践——全局浏览

    难得买到并喜欢一本好书,‘PHP核心技术与最佳实践’. 几天时间,先看了个大概,总结一下整体是什么样子的,怎么看怎么学. 1.总共14章: 2.第1.2章讲PHP的OOP: 其中第一章侧重于PHP的O ...

  4. 初入网络系列笔记(5)FTP协议

    一.借鉴说明,本博文借鉴以下博文 1.锤子,FTP协议,http://www.cnblogs.com/loadrunner/archive/2008/01/09/1032264.html 2.suna ...

  5. 如何搭建SVN服务器,详细安装步骤。

    SVN服务器端安装 下载: VisualSVN是一款图形化svn服务器.官网 http://www.visualsvn.com/server/ 下载地址: http://www.visualsvn.c ...

  6. Java程序设计之Constructor

    插入段代码,下次回忆吧. 先新建一个Person类,代码如下: public class Person { private String name ; private int age; public ...

  7. C#把 DataTable转换为Model实体

    public static List<T> GetModelFromDB<T>( DataTable dt ) { List<T> data = new List& ...

  8. Spring Mock

    今天看别人的测试代码,发现有  MockMvc.MockHttpServletRequest.MockHttpServletResponse ,不知道是干啥的,百度下下才知道  Mock这个东东. 下 ...

  9. canvas arcTo()用法详解

    CanvasRenderingContext2D对象的方法arcTo()的用法. arcTo(x1, y1, x2, y2, radius) arcTo()方法将利用当前端点.端点1(x1,y1)和端 ...

  10. [LeetCode] Number of Digit One 数字1的个数

    Given an integer n, count the total number of digit 1 appearing in all non-negative integers less th ...