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
相关产品推荐
相关产品推荐

