天道不一定酬所有勤
但是,天道只酬勤

[Code]使用反射获取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>
(全文完)
欢迎关注HollisChuang微信公众账号
打赏

如未加特殊说明,此网站文章均为原创,转载必须注明出处。HollisChuang's Blog » [Code]使用反射获取Spring的Bean

分享到:更多 ()

HollisChuang's Blog

联系我关于我