我有以下课程:
@Component("persistenceJPAConfig")
public class JPAPersistenceConfig {...}
使用Spring我可以通过在我的目标类中添加一个带有@Autowired-annotation的方法来“注入”该类,我希望在其中使用JPAPersistenceConfig - Class。我工作得很好,班级本身也很好。
问题是我必须在运行时创建一个类(编写源代码并编译它),它也必须使用bean。
我也添加了自动连接方法,但它保持为空。
@org.springframework.stereotype.Component("Customers")
public class Customers {
public Customers() {
}
private org.product.server.database.JPAPersistenceConfig persistenceJPAConfig;
@org.springframework.beans.factory.annotation.Autowired
public void setPersistenceJPAConfig(org.product.server.database.JPAPersistenceConfig persistenceJPAConfig) {
this.persistenceJPAConfig = persistenceJPAConfig;
}
public void someMethod() {
this.persistenceJPAConfig.getClassByName(...)
// Throws nullpointer
}
}
我是否必须使用@Component标记生成的文件,以便它在Spring中成为“托管bean”?它是如何在运行时在Spring中注册的?
拼命地你的: - )
答案 0 :(得分:0)
您可以在运行时注册bean:
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) applicationContext.getBeanFactory();
beanFactory.registerBeanDefinition("myClass", BeanDefinitionBuilder.rootBeanDefinition(MyClass.class.getName()).getBeanDefinition());
如果你的班级有自动装配属性,他们也会被注入。
答案 1 :(得分:0)
除了@vacuum所说的你可以用@Component
注释生成的类并在运行时扫描它以使用ClassPathScanningCandidateComponentProvider
生成具有依赖关系的bean,看看here