Java 如何使用反射自动注册Springbean

Java 如何使用反射自动注册Springbean,java,spring,reflection,spring-bean,Java,Spring,Reflection,Spring Bean,我的应用程序由两个模块组成,我在module-B下有一些类,我想要的是在module-A中动态加载module-B的jar,并将这些类注册为module-A的上下文中的bean 我在module-B下没有任何context,因此在我的父module-A中加载module-B的上下文对我来说不是一个选项 到目前为止,我所尝试的: ,但我不知道如何注册这些bean 我错过了什么?有没有更好的方法,不用在子模块中创建上下文并在父模块中加载它们。使用ClassPathXmlApplicationCont

我的应用程序由两个模块组成,我在
module-B
下有一些类,我想要的是在
module-A
中动态加载
module-B
jar
,并将这些类注册为
module-A
上下文中的bean

我在
module-B
下没有任何
context
,因此在我的父
module-A
中加载
module-B
的上下文对我来说不是一个选项

到目前为止,我所尝试的:

,但我不知道如何注册这些bean


我错过了什么?有没有更好的方法,不用在子模块中创建上下文并在父模块中加载它们。

使用ClassPathXmlApplicationContext上下文来配置module-a内容,然后可以加载module-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); } } DefaultListableBeanFactory beanFactory=(DefaultListableBeanFactory)上下文; 公共组件(对象组件){ if(类的组件实例){ 类clazz=(类)组件; GenericBeanDefinition beanDef=新的GenericBeanDefinition(); beanDef.setBeanClass(clazz); beanDef.setAutowire候选者(true); setAutowireMode(AbstractBeanDefinition.AUTOWIRE\u构造函数); 字符串beanName=clazz.getName(); beanFactory.registerBeanDefinition(beanName,beanDef); }否则{ registerSingleton(component.getClass().getName(),component); } }
使用ClassPathXmlApplicationContext上下文配置module-A内容,然后可以加载module-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); } } DefaultListableBeanFactory beanFactory=(DefaultListableBeanFactory)上下文; 公共组件(对象组件){ if(类的组件实例){ 类clazz=(类)组件; GenericBeanDefinition beanDef=新的GenericBeanDefinition(); beanDef.setBeanClass(clazz); beanDef.setAutowire候选者(true); setAutowireMode(AbstractBeanDefinition.AUTOWIRE\u构造函数); 字符串beanName=clazz.getName(); beanFactory.registerBeanDefinition(beanName,beanDef); }否则{ registerSingleton(component.getClass().getName(),component); } }
为什么您要手动执行此操作,而不是使用组件扫描和/或自动配置?我没有使用
组件扫描
,因为这些类不在我的模块-A
类路径上
,我需要以某种方式动态地将它们加载到
类路径
或者以某种方式
组件扫描
模块-B
类路径
。模块A中的类是否仅在编译时不在模块B的类路径上,或者在运行时也不在类路径上?
模块-A
是父模块,它需要来自
module-B
的类,现在这些类在编译时和运行时都不存在,除非我在运行时动态加载它们。您确实需要重新组织模块,以准确反映您的依赖关系。为什么您要手动执行此操作,而不是使用组件扫描和/或自动配置?我没有使用
组件扫描
,因为这些类不在我的模块-A
类路径
,我需要以某种方式动态地将它们加载到
类路径
或者以某种方式
组件扫描
模块-B
类路径
。模块A中的类是否仅在编译时不在模块B的类路径上,或者在运行时也不在类路径上?
模块-A
是父模块,它需要来自
module-B
的类,现在这些类在编译时和运行时都不存在,除非我在运行时动态加载它们。您确实需要重新组织模块,以准确反映您的依赖关系。