2016-02-03 16 views
6

Spring Beanを作成したConfigurationクラスまたはxmlファイルを調べるためのプログラム的な方法はありますか?それを理解するためにコードを掘り下げる代わりに。Spring Beanの作成方法をプログラムで確認する方法はありますか?

+0

私は同様の問題をデバッグする必要がありましたたら。 SpringがさまざまなソースからBean定義を読み込む段階があります。このBean定義のコンストラクターに条件ブレークポイントを設定し、最初に作成されたときに条件を満たすことができます。次に、stacktraceの上に移動してソースを表示します。 – AdamSkywalker

+0

@AdamSkywalkerうん、それより簡単な方法があると思っていた。 – Glide

答えて

4

以下は、Bean名を使用して構成のソースを取得する方法を示しています。 ctx.getBeanDefinition( "のbeanName")()

  • 起動getResourceDescription:
    1. は、BeanのBean定義を取得します。

    以下は、AppConfigで定義された@コンフィグレーションベースのBeanと、SpringBeans.xmlで定義された "xmlBean"という名前のXML Beanを設定する実例です。いずれの場合も、ソース@Configurationクラスまたはxmlファイルが正しく表示されます。

    ここでは、Bean = aを設定し、Bean = xmlBeanを含むXML設定ファイルSpringBeans.xmlをロードするjava設定クラスを示します。ここ

    @Configuration 
    @ImportResource({"classpath:SpringBeans.xml"}) 
    @ComponentScan(basePackages = "com.test.config") 
    public class AppConfig { 
    
        @Bean 
        public A a() { 
         return new A(); 
        } 
    
    } 
    

    はSpringBeans.xmlで定義された豆である:

    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); 
    
        ctx.register(AppConfig.class); 
        ctx.refresh(); 
    
        BeanDefinition javaConfigBeanDefinition = ctx.getBeanDefinition("a"); 
        System.out.println("Creation class for a=" + javaConfigBeanDefinition.getResourceDescription()); 
    
        BeanDefinition xmlBeanDefinition = ctx.getBeanDefinition("xmlBean"); 
        System.out.println("Creation XML file for xmlBean=" + xmlBeanDefinition.getResourceDescription()); 
    

    出力:

    Creation class for a=com.test.config.AppConfig 
    Creation XML file for xmlBean=class path resource [SpringBeans.xml] 
    

    ここ

    <bean id="xmlBean" class="com.test.HelloWorld"> 
        <property name="name" value="XML" /> 
    </bean> 
    

    はgetResourceDescriptionを使用する簡単なコード()でありますおそらくより現実的な方法BeanDefinitionRegistryPostProcessorを作成することであり、そこに情報を要求:

    @Component 
    public class FindBeanConfigLocation implements BeanDefinitionRegistryPostProcessor { 
    
        @Override 
        public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException { 
        } 
    
        @Override 
        public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { 
         BeanDefinition javaConfigBeanDefinition = registry.getBeanDefinition("a"); 
         System.out.println("Creation class for a=" + javaConfigBeanDefinition.getResourceDescription()); 
    
         BeanDefinition xmlBeanDefinition = registry.getBeanDefinition("xmlBean"); 
         System.out.println("Creation XML file for xmlBean=" + xmlBeanDefinition.getResourceDescription()); 
        } 
    
    } 
    
  • 関連する問題