0
出於調試目的,我想這樣做:工廠創造了豆 是否可以將bean定義「自動裝入」bean?
@Autowired
private BeanDefinition myBeanDefinition;
即後
,應該接線bean定義到它,所以我可以很容易地看到它在調試過程中來。或者有另一種方法可以在運行時查看bean的定義?
出於調試目的,我想這樣做:工廠創造了豆 是否可以將bean定義「自動裝入」bean?
@Autowired
private BeanDefinition myBeanDefinition;
即後
,應該接線bean定義到它,所以我可以很容易地看到它在調試過程中來。或者有另一種方法可以在運行時查看bean的定義?
你可以使用一個BeanPostProcessor
:
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
public class AutowireBeanDefinitionPostProcessor implements BeanPostProcessor {
@Autowired
private ApplicationContext applicationContext;
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if(bean instanceof BeanDefinitionAware) {
ConfigurableListableBeanFactory factory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
BeanDefinition bd = factory.getBeanDefinition(beanName);
((BeanDefinitionAware) bean).setBeanDefinition(bd);
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
讓你的bean實現BeanDefinitionAware
:
import org.springframework.beans.factory.config.BeanDefinition;
public interface BeanDefinitionAware {
void setBeanDefinition(BeanDefinition beanDefinition);
}
,你可以定義存儲在一個領域。