@Component
public abstract class AbstractProcessTask implements Task {
@Resource
protected WorkOrderEventService workOrderEventService;
@Resource
protected NodeService nodeService;
@Resource
protected ConfigReader configReader;
protected void updateStatus(WorkOrderEvent workOrderEvent, String status, String description) {
workOrderEvent.setStatus(status);
workOrderEvent.setComments(description);
workOrderEventService.saveWorkOrderEvent(workOrderEvent);
}
}
我写了一个抽象类供使用,但是我不知道如何使用。 在旧的春季版本中,我们可以在xml中编写abstract =“ true”。 例如:
<bean id="BaseEventAction" class="com.sinosig.evaluation.fcff.web.event.BasicEventAction"
abstract="true" parent="BaseAction">
<property name="rowFactory" ref="FcffCacheAdapter" />
<property name="caculate" ref="CaculateService" />
<property name="diffusion" ref="DeffusionService" />
</bean>
我该怎么办?
答案 0 :(得分:1)
在抽象类上使用@Component
不会帮助Spring从该类创建bean(当然,您知道您不能从抽象类实例化对象)。在具体类上使用@Component
注释。
@Component
public class MyProcessTask extends AbstractProcessTask {
...
}
其余的都还好。如果spring在扫描路径中找到具体的类,则将自动创建关联的bean。
在bean声明中提到属性abstract=true
时,您只是在抽象bean。 Spring中的抽象bean与抽象类有所不同。实际上,Spring中的抽象bean甚至不必映射到任何类。
有关此问题的更多信息,请参见What is meant by abstract=“true” in spring?
答案 1 :(得分:1)
您可以简单地用另一个类扩展抽象类,并在子类中使用@Component
。您可能还需要实现超类中的任何方法。
@Component
public class AbstractChild extends AbstractProcessTask {
}