获取Spring管理bean对象

package com.sinosoft.base.util;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SpringContextUtil implements ApplicationContextAware {
      private static ApplicationContext applicationContext;     //Spring应用上下文环境

      /**
      * 实现ApplicationContextAware接口的回调方法,设置上下文环境
      * @param applicationContext
      * @throws BeansException
      */
      public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextUtil.applicationContext = applicationContext;
      }

      /**
      * @return ApplicationContext
      */
      public static ApplicationContext getApplicationContext() {
        return applicationContext;
      }

      /**
      * 获取对象
      * @param name
      * @return Object 一个以所给名字注册的bean的实例
      * @throws BeansException
      */
      public static Object getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
      }

      /**
      * 获取类型为requiredType的对象
      * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)
      * @param name       bean注册名
      * @param requiredType 返回对象类型
      * @return Object 返回requiredType类型对象
      * @throws BeansException
      */
      public static Object getBean(String name, Class requiredType) throws BeansException {
        return applicationContext.getBean(name, requiredType);
      }

      /**
      * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
      * @param name
      * @return boolean
      */
      public static boolean containsBean(String name) {
        return applicationContext.containsBean(name);
      }

      /**
      * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
      * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
      * @param name
      * @return boolean
      * @throws NoSuchBeanDefinitionException
      */
      public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
        return applicationContext.isSingleton(name);
      }

      /**
      * @param name
      * @return Class 注册对象的类型
      * @throws NoSuchBeanDefinitionException
      */
      public static Class getType(String name) throws NoSuchBeanDefinitionException {
        return applicationContext.getType(name);
      }

      /**
      * 如果给定的bean名字在bean定义中有别名,则返回这些别名
      * @param name
      * @return
      * @throws NoSuchBeanDefinitionException
      */
      public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
        return applicationContext.getAliases(name);
      }
    }
时间: 2024-08-10 09:15:39

获取Spring管理bean对象的相关文章

获取Spring容器Bean对象工具类

在开发中,总是能碰到用注解注入不了Spring容器里面bean对象的问题.为了解决这个问题,我们需要一个工具类来直接获取Spring容器中的bean.因此就写了这个工具类,在此记录一下,方便后续查阅.废话不多说,直接上代码. 一.代码 package com.zxy.demo.spring; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext;

反射-Spring管理Bean,注入Bean属性的反射机制。

#反射 1.是JAVA API,是Java提供的现成的类!! --接受API提供的功能! 2. 是Java提供的动态执行机制,动态加载类,动态创建对象,动态访问属性,动态调用方法. ##反射用途 1. eclipse 中解析类的结构使用了反射 2.JUnit识别被测试方法使用了反射 -- JUnit3 利用了反射查找test开头的方法 -- JUnit4 利用了反射解析@Test查找测试方法 3.Spring 管理Bean对象,注入Bean属性使用了反射 --利用反射创建Bean对象实例 --利

在普通类中获取Spring管理的bean

1.在项目中添加下面的类: import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext. * */ public class SpringContextHolder implem

编码剖析Spring管理Bean的原理

在Spring的第一个案例中,我们已经知道了怎么将bean交给Spring容器进行管理,并且明白了怎么从Spring容器中获取bean.那我们就有一个疑问了:Spring是如何创建并管理bean的呢?现在我们就来编码剖析Spring管理Bean的原理. 本文是在Spring的第一个案例的基础上展开的. 我们要使用dom4j读取Sping的配置文件--beans.xml <?xml version="1.0" encoding="UTF-8"?> <

采用Spring管理Bean和依赖注入

1.实例化spring容器 和 从容器获取Bean目标 实例化Spring容器常用的两种办法: 办法一: 在类途径下寻觅配置文件来实例化容器 [引荐运用] ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"}); 办法二: 在文件体系途径下寻觅配置文件来实例化容器 [这种办法能够在开发期间运用] ApplicationContext ctx = new FileSyst

深入探索spring技术内幕(二): 剖析spring管理Bean的原理与配置

求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / \ b c / \ / \ d e f g 返回3. 详细描述: 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败

普通java类获取spring容器bean的方法

很多时候,我们在普通的java类中需要获取spring的bean来做操作,比如,在线程中,我们需要操作数据库,直接通过spring的bean中构建的service就可以完成.无需自己写链接..有时候有些好的东西,拿到用就好了. 这里是多种方式中的一种. 通过实现ApplicationContextAware获取bean.这里有个问题,就是,如果spring容器没有启动完成的时候,不能通过这个方法获取,因为这样,会报空指针,因为 private static ApplicationContext

java获取spring的bean

/** * 加载spring配置文件,提供getBean接口. * @author xiongzy * */ public final class BeanLocator { private static final Logger logger = Logger.getLogger(BeanLocator.class); /** * 单实例. */ private static BeanLocator instance = null; /** * 缺省配置文件名称. */ private sta

spring创建Bean对象的控制

1.spring创建Bean对象的控制 a.控制对象创建方式(使用范围),在<bean>元素中使用scope属性控制,scope可以支持singleton或prototype,默认值是singleton <bean scope= "singleton"> 该组件在spring容器里只有一个bean对象.每次取出的bean都是同一个bean,相当于单例模式 <bean scope = "prototype">该组件每次使用getBe