Spring 有没有可能;“自动连线”;将bean定义转换为bean?
出于调试目的,我希望执行以下操作:Spring 有没有可能;“自动连线”;将bean定义转换为bean?,spring,debugging,Spring,Debugging,出于调试目的,我希望执行以下操作: @Autowired private BeanDefinition myBeanDefinition; i、 e.在工厂创建bean之后,它应该将bean定义连接到其中,这样我就可以在调试期间轻松地看到它来自何处 或者,也许有另一种方法可以在运行时查看bean的定义位置?您可以使用BeanPostProcessor: import org.springframework.beans.BeansException; import org.springframe
@Autowired
private BeanDefinition myBeanDefinition;
i、 e.在工厂创建bean之后,它应该将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 );
}
您可以将定义存储在字段中