【问题标题】:Forcing Spring to call subclass for one method强制 Spring 为一种方法调用子类
【发布时间】:2020-07-02 17:07:15
【问题描述】:

春天魔法新手,希望春天魔法能解决我的困境。

我的 groovy/spring 应用程序使用 jar 来处理登录。我想覆盖 jar 中的一个方法,以便在登录过程中(登录后)进行一些自定义处理。

jar 中的类如下所示:

@Component
class Processor extends GenericProcessor {
    @Override
    ProcessedRequest handle(Request request) {
        // do things
       return processRequest(request)
    }

    //Do nothing method method I want to override
    ProcessedRequest processRequest(request) {
        return request
    }
}

在我的应用程序中,我有扩展 jar 类的子类:

class MyProcessor extends Processor {

    @Override
    ProcessedRequest processRequest(request) {
        //do custom processing 
       return request
    }
}

我尝试将MyProcessor 设为@Component,但Processor 类只是调用它自己的processRequest 方法而不是myProcessor 中的processRequest 方法。 我可以用 Spring 做些什么,通过@Component/@Bean/@Qualifier 的某种组合说“只要存在myProcessor,就使用它而不是Processor”?

其他说明: jar中的处理器是在jar中调用的,所以用myProcessor替换调用位置并不容易 我确实有权更改 jar 源代码,但我宁愿不这样做,因为它是一个共享 jar。

【问题讨论】:

    标签: spring spring-boot groovy annotations spring-annotations


    【解决方案1】:

    作为建议,尝试将@Primary 放在您的班级MyProcessor 下。当有多个相同类型的bean时,使用@Primary给一个bean更高的优先级

    @Component
    @Primary
    class myProcessor extends Processor {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 2016-01-06
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多