如何在Spring中为autowire提供基类?

时间:2014-06-03 13:38:59

标签: java spring spring-integration

我想编写一些基本类,默认情况下应选择使用Spring进行自动装配。只有 if 这些类被扩展,因此为它们提供了自定义实现,我希望拾取自定义实现,而不是默认实现。

当我不想创建默认类abstract时,我怎样才能实现它(因为应用程序应该能够在没有自定义实现的情况下运行,只有默认实现)?

以下示例:我想为任何错误提供基本处理程序。但是这个设置只有在我制作BaseHandler摘要时才有效,我不想要(因为在这种情况下我会强迫任何人使用我的库来实现该类)。

@MessageEndpoint
public class BaseHandler {
    @ServiceActivator(inputChannel = "errorChannel")
    public A_Stadisdatensatz handle(Message<MessageHandlingException> message) {
        process(message.getPayload());
    }

    /**
     * Override to supply specific processing
     */
    void process(Payload payload) {
        //do some default processing
    }
}


@MessageEndpoint
public class CustomHandler extends BaseHandler {
    @Override
    void process(Payload payload) {
        //custom processing
    }
}

如果我以这种方式运行,CustomHandler永远不会被选中。 那么,这不可能吗?

1 个答案:

答案 0 :(得分:1)

我想您正在使用@Autowired来注入依赖项。在这种情况下,您可以使用@Primary注释覆盖默认的onesie

@Primary
@MessageEndpoint
public class CustomHandler extends BaseHandler {
    @Override
    void process(Payload payload) {
        //custom processing
    }
}