spring 如何在Sping Boot 中使用抽象类?

8iwquhpp  于 2023-09-29  发布在  Spring
关注(0)|答案(2)|浏览(168)
@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);
  }
}

我写了一个抽象类供使用,但我不知道如何使用。在旧的spring版本中,我们可以在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>

我该怎么办?

jbose2ul

jbose2ul1#

在抽象类上使用@Component不会帮助Spring从抽象类创建bean(当然,您知道,您不能从抽象类示例化对象)。在具体类上使用@Component注解。

@Component
public class MyProcessTask extends AbstractProcessTask {
...
}

其他的都很好。如果Spring在扫描路径中找到具体的类,则会自动创建关联的bean。

不要混淆属性'abstract=true'

当您在bean声明中提到属性abstract=true时,您只是在抽象bean。Spring中的抽象bean与抽象类有些不同。实际上,Spring中的抽象bean甚至不需要Map到任何类。
查看这个不错的答案,了解有关What is meant by abstract=“true” in spring?的更多信息

thtygnil

thtygnil2#

您可以简单地用另一个类扩展抽象类,并在子类中使用@Component。您可能还需要实现超类中的任何方法。

@Component
public class AbstractChild extends AbstractProcessTask {
}

相关问题