通过实现ApplicationContextAware接口动态获取bean

转载自:http://penghuaiyi.iteye.com/blog/2042296

场景:

在代码中需要动态获取spring管理的bean

代码:

SpringContextUtils.java

package com.winner.utils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * Spring的工具类,用来获得配置文件中的bean
 */
@Component
public class SpringContextUtils implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    /**
     *  当继承了ApplicationContextAware类之后,那么程序在调用 getBean(String)的时候会自动调用该方法,
     * 不用自己操作
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextUtils.applicationContext = applicationContext;
    }

    /***
     * 根据一个bean的id获取配置文件中相应的bean
     */
    public static Object getBean(String beanId) throws BeansException {
        if (applicationContext.containsBean(beanId)) {
            applicationContext.getBean(beanId);
        }
        return null;
    }

    /***
     * 根据一个bean的类型获取配置文件中相应的bean
     */
    public static <T> T getBeanByClass(Class<T> requiredType) throws BeansException {
        return applicationContext.getBean(requiredType);
    }

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

    public static ApplicationContext getApplicationContext() {
        return SpringContextUtils.applicationContext;
    }
}

这几个注解所在的包是

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.2.5.RELEASE</version>
</dependency>

SpringContextUtils必须放在Spring容器中

要么在xml配置文件中声明,要么加上注解

时间: 2024-11-04 07:15:25

通过实现ApplicationContextAware接口动态获取bean的相关文章

web 工程中利用Spring的 ApplicationContextAware接口自动注入bean

最常用的办法就是用 ClassPathXmlApplicationContext, FileSystemClassPathXmlApplicationContext, FileSystemXmlApplicationContext 等对象去加载Spring配置文件,这样做也是可以, 但是在加载Spring配置文件的时候,就会生成一个新的ApplicaitonContext对象而不是Spring容器帮我们生成的哪一个, 这样就产生了冗余, 所以不采用应用程序手动加载文件的方式,而是使用Applic

如何手动获取Spring容器中的bean(ApplicationContextAware 接口)

ApplicationContextAware 接口的作用 先来看下Spring API 中对于 ApplicationContextAware 这个接口的描述: 即是说,当一个类实现了这个接口之后,这个类就可以方便地获得 ApplicationContext 中的所有bean.换句话说,就是这个类可以直接获取Spring配置文件中,所有有引用到的bean对象. 如何使用 ApplicationContextAware 接口 如何使用该接口?很简单. 1.定义一个工具类,实现 Applicati

在spring项目中,普通类注入获取Bean,实现ApplicationContextAware接口

在平时spring项目中,某个不能注入Bean的项目中要获取Bean. @Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; public SpringUtil() { } public void setApplicationContext(ApplicationContext arg0

ApplicationContextAware接口实现多继承Bean装配

问题背景 使用多渠道给用户发送短信,但入口只有一个,并且以后可能会摒弃或扩展渠道,所以使用继承来实现. 首先父类接口Sender定义发送短信等一些基础公共方法,主要如下: public interface Sender { void send(); } 各渠道作为子类继承Sender接口,实现基础方法,如下: @Servicepublic class BaseSender1 implements Sender { @Override public void send() { System.out

实现ApplicationContextAware接口时,获取ApplicationContext为null

将懒加载关闭,@Lazy(false),默认为true 1 import org.springframework.beans.BeansException; 2 import org.springframework.context.ApplicationContext; 3 import org.springframework.context.ApplicationContextAware; 4 import org.springframework.context.annotation.Lazy

ContextUtil 获取bean,bean类型

获取application的上下文,获取bean对象及相关信息 package cn.sccl.common.util; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframe

spring中ApplicationContextAware接口使用理解

一.这个接口有什么用?当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean.换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象.二.怎么使用这个接口?例如我有一个方法类AppUtil,这个方法类中需要使用到的ApplicationContext中的某个bean(companyService).一.因为spring要建立属于自己的容器,就必须要加载自己的配置文件.这个时

Spring在代码中获取bean的几种方式(转:http://www.dexcoder.com/selfly/article/326)

方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObjectSupport 方法四:继承自抽象类WebApplicationObjectSupport 方法五:实现接口ApplicationContextAware 方法六:通过Spring提供的ContextLoader 获取spring中bean的方式总结: 方法一:在初始化时保存Applicati

ApplicationContextAware 接口

一.这个接口有什么用? 当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean.换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象. 二.怎么用? 举个例子吧: 例如我有一个方法类AppUtil,这个方法类中需要使用到的ApplicationContext中的某个bean(companyService). 1.因为spring要建立属于自己的容器,就必须要加载自己的配置