不能在课堂上注入Spring-bean

时间:2012-09-28 15:00:32

标签: spring javabeans autowired

我有以下课程:

@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中注册的?

拼命地你的: - )

2 个答案:

答案 0 :(得分:0)

您可以在运行时注册bean:

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

如果你的班级有自动装配属性,他们也会被注入。

答案 1 :(得分:0)

除了@vacuum所说的你可以用@Component注释生成的类并在运行时扫描它以使用ClassPathScanningCandidateComponentProvider生成具有依赖关系的bean,看看here