2013-11-28 2 views
0

디버깅을 위해, 나는이 일을하고 싶습니다 : 공장은 콩을 만들었습니다bean 정의를 bean에 "autowire"할 수 있습니까?

@Autowired 
private BeanDefinition myBeanDefinition; 

즉 한 후, 그것을 디버깅하는 동안 어디에서 왔는지 그래서 쉽게 볼 수 그것으로 bean 정의를 연결합니다.

또는 런타임에 콩이 정의 된 곳을 볼 수있는 또 다른 방법이 있을까요? 당신의 콩 BeanDefinitionAware을 구현합니다

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; 
    } 
} 

:

답변

2

당신은 BeanPostProcessor을 사용할 수

import org.springframework.beans.factory.config.BeanDefinition; 

public interface BeanDefinitionAware { 
    void setBeanDefinition(BeanDefinition beanDefinition); 
} 

을 당신은 필드에 정의를 저장할 수 있습니다.

관련 문제