Spring:在运行时创建bean

时间:2015-12-16 12:02:35

标签: java spring spring-boot

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

要创建的Bean:

@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();
    }
}

这里,applicationContext是自动装配的。 由于它是通过反射实例化类,因此对象不具有自动装配的依赖集。我想要实现的是,扫描所有包(如组件扫描注释中所述),创建bean并设置依赖项。即我希望与应用程序启动时的弹簧完全相同,但是在运行时。 此外,我希望它是完全通用的,因为bean将主要驻留在外部jar中,并且完全限定的类路径和方法名称将在运行时传递(如可插入的体系结构)。

任何想法如何实现这一目标?

0 个答案:

没有答案