You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring如何禁用只读Maven依赖中MyHandler组件的方法调用?

问题根因

  • 你写的覆写方法签名不匹配,没有真正重写父类方法:
    原MyHandler的onButtonClickAction方法带OnButtonClickAction类型入参,你自定义的是无参方法,本质是方法重载而非重写,所以原有带参方法的逻辑还是会正常执行,你自己写的无参方法被额外触发才会出现两行日志同时输出的情况。
  • 其次即使方法签名正确,若Spring容器中仍保留了原MyHandler的Bean实例,原有逻辑仍可能被直接注入调用。

可行解决方案(按实现复杂度排序)

方案1:修正重写逻辑 + 排除原Bean自动注册

步骤1:修正子类的方法签名,确保真正重写父类方法

@Primary
@Component
public class OverrideTry extends MyHandler {
    // 保持方法签名和父类完全一致
    @Override
    public void onButtonClickAction(OnButtonClickAction context) {
        // 这里写你自己的逻辑,不要调用super.onButtonClickAction()就不会执行原有日志打印
        System.out.println("自定义的按键处理逻辑,不会输出原有敏感日志");
    }
}

步骤2:排除原MyHandler的自动扫描注册

在启动类的@SpringBootApplication注解中添加过滤规则,避免Spring加载只读的MyHandler Bean:

@SpringBootApplication(
    excludeFilters = @ComponentScan.Filter(
        type = FilterType.ASSIGNABLE_TYPE,
        classes = MyHandler.class
    )
)
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

方案2:用AOP环绕拦截跳过原有逻辑

如果不想改动Bean注册逻辑,可以直接用AOP切面拦截原MyHandler的目标方法,直接跳过原有执行逻辑:

@Aspect
@Component
public class MyHandlerInterceptor {
    // 拦截MyHandler的onButtonClickAction方法,包路径替换成你实际的MyHandler所在路径
    @Around("execution(* com.xxx.yyy.MyHandler.onButtonClickAction(..))")
    public Object interceptButtonLog(ProceedingJoinPoint pjp) throws Throwable {
        // 这里写你自己的处理逻辑,不调用pjp.proceed()就不会执行原有方法的日志打印
        System.out.println("自定义按键处理逻辑,已拦截原有敏感日志输出");
        return null;
    }
}

需要先引入Spring AOP依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

内容的提问来源于stack exchange,提问作者iftwMZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:24:03