Czy istnieje programowy sposób sprawdzenia, która klasa konfiguracji lub plik xml utworzył komponent Spring bean? Zamiast przeszukiwać kod, aby go rozgryźć.Czy istnieje programowy sposób sprawdzania, w jaki sposób został utworzony komponent Spring bean?
Odpowiedz
Poniżej przedstawiono sposób uzyskiwania źródła konfiguracji przy użyciu nazwy komponentu bean.
- Uzyskanie definicji fasoli dla Fasola: ctx.getBeanDefinition ("beanName")
- Invoke getResourceDescription().
Poniżej znajduje się przykład pracy, który ustawia komponent bean oparty na konfiguracji @Configuration o nazwie "a" zdefiniowany w AppConfig oraz komponent bean XML o nazwie "xmlBean" zdefiniowany w pliku SpringBeans.xml. W każdym przypadku klasa źródłowa @Configuration lub plik xml jest wyświetlany poprawnie.
Oto klasa konfiguracyjna java, która konfiguruje komponent bean = a, a także ładuje plik konfiguracyjny XML SpringBeans.xml zawierający komponent bean = xmlBean.
@Configuration
@ImportResource({"classpath:SpringBeans.xml"})
@ComponentScan(basePackages = "com.test.config")
public class AppConfig {
@Bean
public A a() {
return new A();
}
}
Oto fasoli zdefiniowano w SpringBeans.xml:
<bean id="xmlBean" class="com.test.HelloWorld">
<property name="name" value="XML" />
</bean>
Oto prosty kod, który wykorzystuje 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());
wyjściowa:
Creation class for a=com.test.config.AppConfig
Creation XML file for xmlBean=class path resource [SpringBeans.xml]
Prawdopodobnie bardziej praktyczny sposób jest stworzenie BeanDefinitionRegistryPostProcessor i zażądać informacji tam:
@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. Spring: Jak zastąpić komponent bean Environment utworzony w kontekście aplikacji
- 2. Czy istnieje sposób sprawdzenia, czy komponent bean jest zdefiniowany w kontekście sprężyny?
- 3. W jaki sposób mogę wyposażyć w utworzony wątek Spring TaskExecutor?
- 4. W jaki sposób CDI usuwa stanowy komponent bean sesji?
- 5. Czy komponent bean potomny automatycznie staje się prototypem, jeśli komponent bean rodzicielski został zdefiniowany jako prototypowy
- 6. Spring ApplicationContext Bean Scope
- 7. git - zmiany w oddziale, jaki został utworzony?
- 8. Czy istnieje sposób sprawdzenia, czy komponent reagowania nie jest podłączony?
- 9. Czy istnieje sposób na uzyskanie SQL utworzony przez kwerendę LINQ?
- 10. SDL2 - Sprawdź, czy kontekst OpenGL został utworzony
- 11. W jaki sposób komponent złożony ustawia właściwość w komponencie bean klienta?
- 12. Sposób sprawdzania, czy klucz obcy istnieje w SQL 2005
- 13. Czy istnieje sposób sprawdzania podpisu funkcji w Pythonie?
- 14. Czy istnieje lepszy sposób sprawdzania zmiennych POSTed w PHP?
- 15. Jak ręcznie wyposażyć komponent bean w sprężynę?
- 16. Czy istnieje sposób na wykrycie, czy apk został zaciemniony?
- 17. W jaki sposób Spring MVC obsługuje wielu użytkowników?
- 18. Programowy sposób uzyskiwania słów kluczowych w Ruby
- 19. fantazyjny/skuteczny sposób sprawdzania, czy istnieje dokument pod elasticsearch
- 20. Jaki jest najlepszy sposób pracy z danymi SQL Server w sposób nie programowy?
- 21. Eclipse: Programowanie dynamiczne w sposób programowy
- 22. W jaki sposób wątek główny utworzony przez Javę
- 23. jaki sposób sprawdzania cmake dla kompilatora
- 24. Jaki jest prawidłowy sposób rejestracji haka zamknięcia w Spring 3?
- 25. Czy istnieje sposób przezroczystego wykonywania sprawdzania poprawności obiektów SQLAlchemy?
- 26. Czy istnieje sposób wyłączenia sprawdzania poprawności zdarzeń dla całej strony?
- 27. Przenośny sposób sprawdzania, czy istnieje katalog [Windows/Linux, C]
- 28. Czy istnieje sposób sprawdzania hstore PostgreSQL z Hibernacja/JPQL?
- 29. Spring Security dependency bean bean
- 30. Czy istnieje sposób sprawdzania chrome chrome: // flags/values using javascript?
Kiedyś miałem podobny problem do debugowania. Istnieje faza, w której Spring czyta definicje fasoli z różnych źródeł. Możesz umieścić warunki przerwania w konstruktorze definicji tego komponentu i uchwycić moment, w którym został utworzony pierwszy. Wtedy zobaczysz źródło, przesuwając górną część w stosie. – AdamSkywalker
@AdamSkywalker Tak, miałem nadzieję, że będzie łatwiejszy sposób. – Glide