是否可以对动态类的字段进行自动装配?
使用工厂很好,但是不允许我@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。