采用springHoder 的方式 获取 bean

1 篇文章 0 订阅

采用springHoder 的方式 获取 bean

    public ChannelTradeServiceInner getTradeService(String tradePayChannel) throws TradeClassNotFoundException{
        String beanName = tradePayChannel+"TradeInnerImpl";
        ChannelTradeServiceInner tradeService = null;
        //采用springHoder 的方式 获取  partner.getPayChannel().getCode()+"PayService"
        try{
            tradeService = SpringContextHolder.getBean(beanName);
        }catch(NoSuchBeanDefinitionException e){
            throw new TradeClassNotFoundException("交易处理类,通过SpringContextHolder未获取到:"+beanName);
        }
        logBiz.info("("+beanName+")获取到交易处理类对象:"+tradeService.toString());
        return tradeService; 
    }

配置

package cc.eslink.paycenter.gateway.util;

import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/** 
 * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext. 
 *  
 */  
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, 取出第一个.
     */
    public static <T> T getBean(Class<T> clazz) {
        checkApplicationContext();
        Map<String,T> beanMaps = applicationContext.getBeansOfType(clazz);
        if (beanMaps!=null && !beanMaps.isEmpty()) {
            return (T) beanMaps.values().iterator().next();
        } else{
            return null;
        }
    }


    /** 
    * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. 
    */  
    @SuppressWarnings("unchecked")  
    public static <T> T getBeanFromClassName(String clazzName) { 
        @SuppressWarnings("rawtypes")
        Class clazz;
        try {
            clazz = Class.forName(clazzName);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
        return (T)getBean(clazz);  
    }  

    /**
     * 清除applicationContext静态变量.  
     */
    public static void cleanApplicationContext() {  
        applicationContext = null;  
    }  

    private static void checkApplicationContext() {  
        if (applicationContext == null) {  
            throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");  
        }  
    }  
}  

xml配置

 <bean class="cc.eslink.paycenter.gateway.util.SpringContextHolder" lazy-init="false" /> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值