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