gpt4 book ai didi

java - 获取Spring bean依赖@Runtime

转载 作者:行者123 更新时间:2023-12-04 04:50:19 25 4
gpt4 key购买 nike

在 Spring 应用程序中,我想在运行时获取给定 bean 的对象图结构以及依赖项列表(包括嵌套)。

例如:

public class College {
private List<Student>
private List<Staff>
private List<Department>

setter Methods....
}

public class Student {
private List<Subject>;
private Address;

setter Methods....
}

假设:
* 所有都通过 Spring 注入(inject)和接线。
* 想要在 spring 中利用任何 API(因此避免反射)

目标:
* 通过 UI 向用户显示依赖信息。实现这一点的其他方法是在应用程序外部维护一个重复副本(如 db、非 Spring bean xml),这当然是不好的,因此可以避免

最佳答案

您可以使用 ReaderEventListener在上下文启动时构建对象图。

例如:

public class TrackingReaderEventListener extends EmptyReaderEventListener {

private Map<String, ComponentDefinition> components = new HashMap<String, ComponentDefinition>();

@Override
public void componentRegistered(ComponentDefinition componentDefinition) {
components.put(componentDefinition.getName(), componentDefinition);
}

public Map<String, ComponentDefinition> getComponentMap() {
return components;
}

public static void main (String[] args) {
TrackingReaderEventListener listener = new TrackingReaderEventListener();
ClassPathXmlApplicationContext context = new AppContext("applicationContext.xml", listener);
context.refresh(); // or may be load beans definitions only
}

}

class AppContext extends ClassPathXmlApplicationContext {

private ReaderEventListener readerListener;

public AppContext(String configLocation, ReaderEventListener readerListener) {
super(new String[] {configLocation} , false);
this.readerListener = readerListener;
}

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

}

或直接从 BeanFactory 构建它们
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)  context.getBeanFactory();
String[] beanNames = beanFactory.getBeanDefinitionNames();
for (String beanName : beanNames) {
BeanDefinition bd = beanFactory.getBeanDefinition(beanName);
PropertyValues pvs = bd.getPropertyValues();
String[] dependsOn = bd.getDependsOn();
...
}

关于java - 获取Spring bean依赖@Runtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17524216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com