2013-11-28 66 views
0

出於調試目的,我想這樣做:工廠創造了豆 是否可以將bean定義「自動裝入」bean?

@Autowired 
private BeanDefinition myBeanDefinition; 

即後

,應該接線bean定義到它,所以我可以很容易地看到它在調試過程中來。

或者有另一種方法可以在運行時查看bean的定義?

回答

2

你可以使用一個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); 
} 

,你可以定義存儲在一個領域。

相關問題