3

これは大きなアプリケーションであり、Spring コンテナーによってロードされる複数の Bean xml ファイルがあります。

どういうわけかオーバーライドされている 1 つの Bean (同じ ID を持つ) があります。

とにかく、どの Bean がどの .xml ファイルから作成されたかをログに記録するように春に指示する方法はありますか?

4

1 に答える 1

1

を作成しReaderEventListenerてログに記録できます。ただし、オンinitBeanDefinitionReaderに設定するにはオーバーライドする必要があります(他に方法はないと思いますが、そうかもしれません...)。ListenerXmlBeanDefinitionReader

例えば:

  public class LogReaderEventListener extends EmptyReaderEventListener {

    private static final Log log = LogFactory.getLog(LogReaderEventListener.class);

    @Override
    public void componentRegistered(ComponentDefinition componentDefinition) {

        log.info("Registered Component [" + componentDefinition.getName() + "]");
        for (BeanDefinition bd : componentDefinition.getBeanDefinitions()) {
            String name = bd.getBeanClassName();

            if (bd instanceof BeanComponentDefinition) {
                name = ((BeanComponentDefinition) bd).getBeanName();
            }
            log.info("Registered bean definition: [" + name + "]" + 
                    " from " + bd.getResourceDescription());
        }
    }


    public static void main (String[] args) {
        ClassPathXmlApplicationContext context = new LogXmlContext("applicationContext.xml");
        context.close();

    }

}

class LogXmlContext extends ClassPathXmlApplicationContext {

    public LogXmlContext(String configLocation) {
        super(configLocation);
    }

    @Override
    protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
        super.initBeanDefinitionReader(reader);
        reader.setEventListener(new LogReaderEventListener());
    }

}
于 2012-05-16T19:35:32.997 に答える