Có cách nào có lập trình để tìm ra lớp Cấu hình hoặc tệp xml nào đã tạo một bean Spring không? Thay vì đào qua mã để tìm ra.Có cách nào để tìm hiểu cách tạo bean Spring?
6
A
Trả lời
4
Phần sau minh họa cách lấy nguồn của cấu hình bằng tên bean.
- Lấy nét đậu cho đậu: ctx.getBeanDefinition ("beanName")
- Gọi getResourceDescription().
Dưới đây là ví dụ hoạt động thiết lập bean dựa trên @Configuration được gọi là 'a' được định nghĩa trong AppConfig và một bean XML có tên "xmlBean" được định nghĩa trong SpringBeans.xml. Trong mỗi trường hợp, lớp @Configuration nguồn hoặc tệp xml được hiển thị chính xác.
Đây là lớp cấu hình java thiết lập bean = a và cũng tải tệp cấu hình XML SpringBeans.xml chứa bean = xmlBean.
@Configuration
@ImportResource({"classpath:SpringBeans.xml"})
@ComponentScan(basePackages = "com.test.config")
public class AppConfig {
@Bean
public A a() {
return new A();
}
}
Đây là đậu quy định tại SpringBeans.xml:
<bean id="xmlBean" class="com.test.HelloWorld">
<property name="name" value="XML" />
</bean>
Đây là mã đơn giản trong đó sử dụng 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());
Output:
Creation class for a=com.test.config.AppConfig
Creation XML file for xmlBean=class path resource [SpringBeans.xml]
Có lẽ một cách thực tế hơn là tạo ra một BeanDefinitionRegistryPostProcessor và yêu cầu thông tin đó:
@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());
}
}
Các vấn đề liên quan
- 1. Đảm bảo rằng Spring Bean được khởi tạo đúng cách
- 2. Làm cách nào để lấy id của bean từ bên trong bean trong Spring?
- 3. Java Spring Tạo lại Bean cụ thể
- 4. Spring + JPA + MVC - Lỗi khi tạo bean
- 5. Java Spring bean với hàm tạo riêng
- 6. Lỗi khi tạo bean có tên 'org.springframework.security.filterChains' Spring + Hibernate + UserDetailService
- 7. Làm cách nào để đặt tên thuộc tính của bean có phạm vi phiên Spring?
- 8. Có thể unproxy một Spring bean không?
- 9. Spring ApplicationContext Bean Scope
- 10. Hiểu Spring Boot @Autowired
- 11. Làm thế nào để tạo một bean Spring từ một hàm tạo lớp bên trong tĩnh?
- 12. Spring singleton bean
- 13. Cách tìm hiểu cách Amazon AMI tạo ngày
- 14. Cách tốt nhất để tìm hiểu WebGL
- 15. Làm cách nào để xác định bean Spring bằng chú thích thay vì XML?
- 16. Làm cách nào để truyền các tham số động tới các bean Spring
- 17. Làm cách nào để Spring tự động theo tên khi tìm thấy nhiều hơn một bean phù hợp?
- 18. Làm cách nào để tạo trình tạo xác thực chéo tùy chỉnh trong việc tìm hiểu?
- 19. Cách tìm hiểu agda
- 20. spring: đặt thuộc tính của một bean bằng cách đọc thuộc tính của bean khác?
- 21. Cách tìm hiểu ADO.NET
- 22. Làm cách nào để tải Thuộc tính Camel vào Bean?
- 23. cách chèn một mảng int vào spring bean
- 24. Làm cách nào để tìm hiểu thuật toán của Tarjan?
- 25. Tôi làm cách nào để tìm tất cả các bean có chú thích tùy chỉnh @Foo?
- 26. dự án noob để tìm hiểu Spring/Hibernate
- 27. Di chuyển JSF Managed Bean sang Spring bean
- 28. Có thể đặt tên bean bằng cách sử dụng chú thích trong Spring Framework không?
- 29. Làm cách nào để tìm hiểu về mã nguồn GNU?
- 30. Làm cách nào để tìm hiểu Java5 hoặc Java6?
Một khi tôi đã phải gỡ rối vấn đề tương tự. Có một giai đoạn mà Spring đọc các định nghĩa bean từ nhiều nguồn khác nhau. Bạn có thể đặt các điểm ngắt điều kiện trong hàm tạo của các định nghĩa bean này và bắt một thời điểm khi nó được tạo đầu tiên. Sau đó, bạn sẽ thấy nguồn bằng cách di chuyển lên trên trong stacktrace. – AdamSkywalker
@AdamSkywalker Yeah Tôi đã hy vọng sẽ có một cách dễ dàng hơn thế. – Glide