1

我有以下课程:

@Component("persistenceJPAConfig")
public class JPAPersistenceConfig {...}

使用 Spring,我可以通过在我想要使用 JPAPersistenceConfig - 类的目标类中添加一个带有 @Autowired-annotation 的方法来“注入”类。我工作正常,课程本身很好。

问题是我必须在运行时创建一个类(编写源代码并编译它),它也必须使用 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 中注册的?

拼命地你的:-)

4

2 回答 2

0

您可以在运行时注册 bean:

DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) applicationContext.getBeanFactory();
beanFactory.registerBeanDefinition("myClass", BeanDefinitionBuilder.rootBeanDefinition(MyClass.class.getName()).getBeanDefinition());

如果你的类有自动装配的属性,它们也会被注入。

于 2012-09-28T15:32:28.283 回答
0

除了@vacuum 所说的之外,您还可以使用 注释生成的类@Component并在运行时对其进行扫描以生成具有其依赖项的 bean ClassPathScanningCandidateComponentProvider,请看这里

于 2012-09-28T15:37:21.893 回答