これは大きなアプリケーションであり、Spring コンテナーによってロードされる複数の Bean xml ファイルがあります。
どういうわけかオーバーライドされている 1 つの Bean (同じ ID を持つ) があります。
とにかく、どの Bean がどの .xml ファイルから作成されたかをログに記録するように春に指示する方法はありますか?
これは大きなアプリケーションであり、Spring コンテナーによってロードされる複数の Bean xml ファイルがあります。
どういうわけかオーバーライドされている 1 つの Bean (同じ ID を持つ) があります。
とにかく、どの Bean がどの .xml ファイルから作成されたかをログに記録するように春に指示する方法はありますか?
を作成しReaderEventListener
てログに記録できます。ただし、オンinitBeanDefinitionReader
に設定するにはオーバーライドする必要があります(他に方法はないと思いますが、そうかもしれません...)。Listener
XmlBeanDefinitionReader
例えば:
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());
}
}