如何自动装配动态类

时间:2013-04-09 19:38:48

标签: java spring

是否可以在动态类上自动跟踪字段?

使用工厂很棒,但它不允许我使用@Autowire字段。

public static Workflow factory(WorkflowEntity workflowEntity) {
    try {
        Class<?> clazz = Class.forName(workflowEntity.getClassName())
                .asSubclass(Workflow.class);
        Object workflowClass = clazz.getConstructor(WorkflowEntity.class).newInstance(workflowEntity);
        return (Workflow) workflowClass;
    } catch (Exception e) {
        e.printStackTrace();
        logger.severe("Unable to instantiate "+workflowEntity.getClassName()+" class: " + e.getLocalizedMessage());
    }

    return null;
}

是否可以这样做,但是Spring会处理自动连接的字段吗?

1 个答案:

答案 0 :(得分:1)

对于Spring来自动装配字段,它需要负责创建对象。由于您在某些Factory类中创建对象,因此Spring无法注入字段。例如,如果你做了

Object o = new ObjectWithAutowiredFields();

Spring如何知道自动装配该对象的字段,它甚至没有扫描过该类。

但是,如果你的工厂是一个Spring bean,你可以在其中包含@Autowired个字段,并使用那些你要实例化的类的构造函数(假设该类有这样的构造函数)或者使用setter。