您也許能夠做這樣的事與@PostConstruct
ClassA
的:
@PostConstruct
public void postConstruct(){
SomeAnnoation someAnnotation = this.getClass().getField("bar").getAnnotation(SomeAnnotation.class);
bar.someString(someAnnotation.value());
}
更新: - 使用BeanPostProcessor的通用解決方案:
public class SomeAnnotationFieldInitalizer implements BeanPostProcessor{
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
Field[] fields = bean.getClass().getFields();
if (fields!=null){
for (Field field:fields){
SomeAnnotation someAnnotation = field.getAnnotation(SomeAnnotation.class);
if (someAnnotation!=null){
try {
ReflectionUtils.makeAccessible(field);
field.set(bean, someAnnotation.value());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return bean;
}
}
所以我會實現這個方法在所有我想成爲'ClassA'類的類上。我在尋找一個通用的解決方案,例如可以在Spring上下文中註冊的BeanPostProcessor。 – Tnem
好吧,這是一個很好的想法,你實際上可以將相同的代碼移動到豆後期處理器,它應該仍然有效,我已經添加了一個更新的答案。 –