使用反射获取Spring的Bean

/**
 * Bean的转换类
 * 会将形如APP_INFO_SERVICE的字符串转换成T类型appInfoService
 * Created by hollis on 15/7/21.
 */

public class BeanTransverter<T> implements BeanFactoryAware {
    private BeanFactory beanFactory;

    /**
     * 获取类型为clazz,beanId为enumName(A_BEAN -> aBean)的Bean。
     * @param enumName
     * @return
     */
    public T getBean(String enumName) {
        String beanName = toBeanName(enumName);
        return (T) beanFactory.getBean(beanName);
    }


    private String toBeanName(String enumName) {

        String lowerCase = enumName.toLowerCase();
        String replacedStr = StringUtils.replace(lowerCase, "_", " ");
        String capitaliseAllWords = StringUtils.capitaliseAllWords(replacedStr);
        String[] parts = StringUtils.split(capitaliseAllWords, " ");
        String join = StringUtils.join(parts, "");

        return StringUtils.uncapitalise(join);
    }


    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }
}

/**
 * @author hollis
 */
public class LabelItemProcessor implements ItemProcessor<AppinfoDO, List<AppLabelDO>> {

    private BeanTransverter<LabelMarker> beanTransverter;

    public List<AppLabelDO> process(AppinfoDO item) throws Exception {
        List<AppLabelDO> appLabelDOs = new ArrayList<AppLabelDO>();

        for(LabelItemEnum labelItem : LabelItemEnum.values()){
            LabelMarker labelMarker = beanTransverter.getBean(labelItem.toString());
            AppLabelDO appLabelDO = labelMarker.marking(item);
            if(StringUtils.isNotBlank(appLabelDO.getLabelName())){
                appLabelDOs.add(appLabelDO);
            }
        }
        return appLabelDOs;
    }

    public void setBeanTransverter(BeanTransverter beanTransverter) {
        this.beanTransverter = beanTransverter;
    }
}

<bean id="labelItemProcessor" class="com.alibaba.intl.batch.label.marking.batch.LabelItemProcessor">
    <property name="beanTransverter" ref="beanTransverter"/>
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值