1:创建注解
2:扩展
3:配置
4:使用
/**
*
* @author ZhangKaiTao
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Properties {
String name();
}
2:扩展
/**
*
* @author ZhangKaiTao
*
*/
public class AnnotationBeanPostProcessor extends PropertyPlaceholderConfigurer
implements BeanPostProcessor, InitializingBean {
private static transient Log logger = LogFactory
.getLog(AnnotationBeanPostProcessor.class);
private java.util.Properties pros;
@SuppressWarnings("unchecked")
private Class[] enableClassList = { String.class };
@SuppressWarnings("unchecked")
public void setEnableClassList(Class[] enableClassList) {
this.enableClassList = enableClassList;
}
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
Field[] fields = bean.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Properties.class)) {
if (filterType(field.getType().toString())) {
Properties p = field.getAnnotation(Properties.class);
try {
ReflectionUtils.makeAccessible(field);
field.set(bean, pros.getProperty(p.name()));
} catch (Exception e) {
logger.error(" --- ", e);
}
}
}
}
return bean;
}
@SuppressWarnings("unchecked")
private boolean filterType(String type) {
if (type != null) {
for (Class c : enableClassList) {
if (c.toString().equals(type)) {
return true;
}
}
return false;
} else {
return true;
}
}
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
return bean;
}
public void afterPropertiesSet() throws Exception {
pros = mergeProperties();
}
}
3:配置
<bean id="propertyConfigurer" class="withub.system.versioncontrol.com.AnnotationBeanPostProcessor" scope="singleton">
<property name="locations">
<list>
<value>classpath:db.properties</value>
</list>
</property>
</bean>
4:使用
@Properties(name="fydm")
private String fydm;