Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 有没有可能;“自动连线”;将bean定义转换为bean?_Spring_Debugging - Fatal编程技术网

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 );
}
您可以将定义存储在字段中