/**
* 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>