Java Spring:在运行时创建bean

Java Spring:在运行时创建bean,java,spring,spring-boot,Java,Spring,Spring Boot,我正在开发一个需要在运行时创建Springbean的模块。我的驱动程序应用程序是一个spring启动应用程序,它需要创建一个bean(在应用程序的组件扫描包之外)并调用该bean中的一个方法。完全限定的类名和方法名将是运行时参数。以下是一个例子: 要创建的Bean: 下面是驱动程序类代码(显然不起作用): 这里,applicationContext是自动连接的。 由于该对象通过反射实例化该类,因此不会设置自动连接的依赖项。我想要实现的是扫描所有包(如组件扫描注释中所述),创建bean并设置依赖项

我正在开发一个需要在运行时创建Springbean的模块。我的驱动程序应用程序是一个spring启动应用程序,它需要创建一个bean(在应用程序的组件扫描包之外)并调用该bean中的一个方法。完全限定的类名和方法名将是运行时参数。以下是一个例子:

要创建的Bean:

下面是驱动程序类代码(显然不起作用):

这里,applicationContext是自动连接的。 由于该对象通过反射实例化该类,因此不会设置自动连接的依赖项。我想要实现的是扫描所有包(如组件扫描注释中所述),创建bean并设置依赖项。i、 我想做的和spring在应用程序启动时做的完全一样,只是在运行时。 此外,我希望它是完全通用的,因为bean将主要驻留在外部jar中,完全限定的类路径和方法名称将在运行时传递(类似于可插拔的体系结构)


有没有办法实现这一点?

想过将其委托给一个原型bean,然后该bean将完成test()所做的工作?除此之外,您可能还想阅读以下内容:;-)为什么?似乎是一个可怕的复杂情况。假设所有东西都有相同的基本包(
com.company
),只需扫描包并构造组件即可。如果您想要一个可插拔的体系结构,请使用OSGi或Java服务API之类的东西。如果所有这些都失败了,你甚至可以使用
@Configurable
在Spring之外构建的类中注入依赖项。问题是为什么?我们已经有一个Spring应用程序在运行,我只是在探索如何将可插拔服务层添加到现有应用程序中的选项。最好使用OSGi。我认为使用Spring,您最好的选择是重新初始化整个应用程序上下文。
@Component
@ComponentScan(basePackages = {"com.test"})
public class TestClass {

    @Autowired
    private AnotherTestClass anotherTest;

    public void test(){
        System.out.println("In test");
        anotherTest.test();
    }

}
public void test(){
    try{
        Class testClass = Class.forName("com.test.TestClass");
        Object newInstance = testClass.newInstance();
        applicationContext.getAutowireCapableBeanFactory().autowireBean(newInstance);
        Method testMetod = testClass.getMethod("test");
        testMetod.invoke(newInstance, null);
    }catch(Exception e){
        e.printStackTrace();
    }
}