是否可以对动态类的字段进行自动装配?

使用工厂很好,但是不允许我@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会处理自动装配的字段?

最佳答案

为了使Spring自动连接字段,需要负责创建对象。由于您是在某些Factory类中创建对象的,因此Spring无法注入字段。例如,如果您做了

Object o = new ObjectWithAutowiredFields();


Spring怎么会知道如何自动连接对象的字段,它甚至没有扫描类。

但是,如果工厂是Spring bean,则可以在其中包含@Autowired字段,并将其与要实例化的类的构造函数一起使用(假定该类具有此类构造函数)或setter。

07-28 08:36