Java Spring:在运行时创建bean
我正在开发一个需要在运行时创建Springbean的模块。我的驱动程序应用程序是一个spring启动应用程序,它需要创建一个bean(在应用程序的组件扫描包之外)并调用该bean中的一个方法。完全限定的类名和方法名将是运行时参数。以下是一个例子: 要创建的Bean: 下面是驱动程序类代码(显然不起作用): 这里,applicationContext是自动连接的。 由于该对象通过反射实例化该类,因此不会设置自动连接的依赖项。我想要实现的是扫描所有包(如组件扫描注释中所述),创建bean并设置依赖项。i、 我想做的和spring在应用程序启动时做的完全一样,只是在运行时。 此外,我希望它是完全通用的,因为bean将主要驻留在外部jar中,完全限定的类路径和方法名称将在运行时传递(类似于可插拔的体系结构)Java Spring:在运行时创建bean,java,spring,spring-boot,Java,Spring,Spring Boot,我正在开发一个需要在运行时创建Springbean的模块。我的驱动程序应用程序是一个spring启动应用程序,它需要创建一个bean(在应用程序的组件扫描包之外)并调用该bean中的一个方法。完全限定的类名和方法名将是运行时参数。以下是一个例子: 要创建的Bean: 下面是驱动程序类代码(显然不起作用): 这里,applicationContext是自动连接的。 由于该对象通过反射实例化该类,因此不会设置自动连接的依赖项。我想要实现的是扫描所有包(如组件扫描注释中所述),创建bean并设置依赖项
有没有办法实现这一点?想过将其委托给一个原型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();
}
}