我的应用程序由2个模块组成,我在module-B
下有一些类,我想要的是动态加载module-A
中module-B
的jar
并将这些类注册为module-A
的context
中的bean。
我在 module-B
下没有任何 context
,因此在我的父 module-A
中加载 module-B
的上下文不适合我。
到目前为止我已经尝试过:
JCL ,但我无法弄清楚应该如何注册这些 bean。
我错过了什么?有没有更好的方法来做到这一点,而无需在子模块中创建上下文并将它们加载到父模块中。
最佳答案
使用 ClassPathXmlApplicationContext 上下文来配置模块 A 的内容,然后您可以加载模块 B jar,并使用以下代码添加 bean
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)context.getAutowireCapableBeanFactory(); public void addComponent(Object component) { if (component instanceof Class) { Class clazz = (Class) component; GenericBeanDefinition beanDef = new GenericBeanDefinition(); beanDef.setBeanClass(clazz); beanDef.setAutowireCandidate(true); beanDef.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR); String beanName = clazz.getName(); beanFactory.registerBeanDefinition(beanName, beanDef); } else { beanFactory.registerSingleton(component.getClass().getName(), component); } }
关于java - 如何使用反射自动注册spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31335882/