Есть ли программный способ узнать, какой класс конфигурации или XML-файл создал компонент Spring? Вместо того, чтобы выкапывать код, чтобы понять это.Есть ли программный способ узнать, как был создан компонент Spring?
6
A
ответ
4
Ниже показано, как получить источник конфигурации с использованием имени компонента.
- Получить определение бина для компонента: ctx.getBeanDefinition ("beanName")
- Invoke getResourceDescription().
Ниже приведен рабочий пример, который устанавливает @Configuration на основе компонент под названием «а» определяется в AppConfig, и XML боб с именем «xmlBean» определено в SpringBeans.xml. В каждом случае корректно отображается исходный класс @Configuration или XML-файл.
Здесь находится класс конфигурации java, который устанавливает bean = a, а также загружает файл конфигурации XML SpringBeans.xml, содержащий bean = xmlBean.
@Configuration
@ImportResource({"classpath:SpringBeans.xml"})
@ComponentScan(basePackages = "com.test.config")
public class AppConfig {
@Bean
public A a() {
return new A();
}
}
Здесь фасоли определено в SpringBeans.xml:
<bean id="xmlBean" class="com.test.HelloWorld">
<property name="name" value="XML" />
</bean>
Вот простой код, который использует getResourceDescription():
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]
Вероятно, более практичный способ является создание 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());
}
}
Смежные вопросы
- 1. Есть ли способ узнать, когда был создан объект?
- 2. Как узнать, был ли создан экземпляр класса
- 3. Как узнать, был ли объект создан Immutable
- 4. Как узнать, был ли создан EditText?
- 5. Как узнать, какой компонент был создан с помощью React Router?
- 6. Есть ли программный способ узнать, было ли мероприятие [нет] GC'ed?
- 7. Есть ли программный способ узнать, было ли мое приложение оценено?
- 8. Есть ли способ проверить, был ли создан массив?
- 9. Есть ли способ узнать, был ли один твит создан за другим на основе идентификатора твита?
- 10. Программный способ узнать, просматривается ли ваша визуальная форма
- 11. Есть ли способ узнать, был ли класс скомпилирован для java6?
- 12. есть ли способ узнать, был ли результат усилен в SOLR?
- 13. Есть ли способ узнать, был ли сжат byte [] gzipstream?
- 14. Есть ли способ узнать, был ли инициализирован ленивый var?
- 15. Есть ли способ узнать, был ли сценарий успешно загружен?
- 16. Есть ли способ узнать, не был ли изменен PHP-скрипт?
- 17. Есть ли способ узнать, был ли класс унаследован в C++
- 18. есть ли способ узнать, был ли файл изменен?
- 19. Есть ли способ для Activity узнать, какой фрагмент был только что создан?
- 20. Есть ли способ узнать, сколько раз класс был создан в php?
- 21. Есть ли способ узнать, какой экземпляр был обновлен или создан при использовании Realm Notifications?
- 22. Учитывая дату и время, есть ли способ узнать, какой идентификатор автоинкремента был создан в то время?
- 23. Как узнать, был ли файл уже создан в StorageFolder
- 24. Как узнать, был ли файл создан через определенное время (bash)
- 25. Есть ли способ проверить, создан ли SVG?
- 26. Как узнать, был ли пакет пакетов создан с расширениями C?
- 27. Можно ли узнать, когда был создан InventoryFile без его загрузки?
- 28. angular2: есть ли способ узнать, когда компонент скрыт?
- 29. Есть ли способ узнать аргумент, переданный в банку, был указан?
- 30. Есть ли способ узнать, когда был введен определенный UITextView?
Однажды мне пришлось отлаживать подобный вопрос. Существует фаза, в которой Spring считывает определения бобов из разных источников. Вы можете поместить контрольные точки состояния в конструктор этих определений бобов и уловить момент, когда он был впервые создан. Затем вы увидите источник, перемещаясь вверху в стеке. – AdamSkywalker
@AdamSkywalker Да, я надеялся, что будет более простой путь. – Glide