0
我有一個靜態字段的類,我想設置一個在運行時創建的這個字段的bean引用。這是我在下面寫的。RuntimeBeanReference設置爲一個靜態字段
@Service
public class Beauty extends Base{
public static staticService;
@Override
protected void initField() {
initBean()
}
}
Base.class
public abstract class Base implements BeanFactoryAware, BeanFactoryPostProcessor {
private BeanFactory beanFactory;
private ConfigurableListableBeanFactory configurableListableBeanFactory;
protected void initBean(){
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClassName("com.StaticService");
beanDefinition.setInitMethodName("init");
MutablePropertyValues values = new MutablePropertyValues();
values.addPropertyValue("fieldA", "aValue");
values.addPropertyValue("fieldB, "bValue");
beanDefinition.setPropertyValues(values);
String beanName = "staticService";
((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(beanName, beanDefinition);
String[] beanNames = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(configurableListableBeanFactory, this.getClass());
if (null == beanNames || beanNames.length > 1) {
throw new RuntimeException("error with multi client");
}
BeanDefinition beautyBean = ((BeanDefinitionRegistry) beanFactory).getBeanDefinition(beanNames[0]);
beautyBean.getPropertyValues().addPropertyValue(new PropertyValue(staticService, new RuntimeBeanReference(beanName)));
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
this.configurableListableBeanFactory = beanFactory;
initField();
}
protected abstract void initField();
}
但是當我使用美容。 staticService然後得到null.How使它工作。
順便說一句:因爲我想要得到的staticService bean可以被代理,所以我不能使用applicationContext.getBean設置到建議bean inited之前的字段。
感謝您的答覆。正如我剛剛嘗試的那樣,它不是null,使用autowireBeanProperties,但正如我在BTW中指出的那樣,Beauty。我的方面bean不能提供staticService。 – neptune
你可以顯示ascpet或你需要如何使用staticService嗎?它真的應該是靜態字段嗎? – xyz
是的,它真的應該是靜態的領域,因爲我的問題說。這是我的方面。 @Around(「執行(* com.StaticService)」)。 – neptune