java - 在抽象类中定义方法时,在方法连接点停止 spring-batch-application
问题描述
更新内容:对于我项目中批处理应用程序的一些系统测试,我想从测试类中影响作业步骤的行为。为此,我将“MethodInterceptor”附加到任何步骤 bean,例如 bean 的异常抛出拦截器writer
。
在我的例子中,writer 类Xyzwriter
正在扩展一个实现ItemWriter
.
public abstract class Abstractwriter implements ItemWriter {
...
@override
public void write(){
//writing
}
public class Xyzwriter extends Abstractwriter {
public void someMethod(){
//dowhat
}
}
请注意,该write
方法仅在抽象类内部被覆盖。
现在我想完全停止该write
方法的批处理。所以我必须将方法拦截器传递给writerbean。为此,我定义了一个 BeanPostProcessor,并在配置类中为它的 write 方法附加了一个 Methodinterceptor 到 writer bean:
myBeanPostProcessor.getMap().put("Xyzwriter", dangerousWriterInterceptor);
在哪里:
public class MyBeanPostProcessor implements BeanPostProcessor {
private Map<String , MyInterceptoredBeanType> map = new HashMap<>();
@Override
public Object postProcessAfterInitialization(Object bean, String intercepedBeanName) throws BeansException {
if ( map.get(intercepedBeanName) != null ){
return map.get(intercepedBeanName);
}
return bean;
}
}
在加载 spring 上下文后的测试内部,我打开/关闭 bean 的异常抛出-bahvior dangerousWriterInterceptor
,然后开始工作。
但是,这样,我得到错误:'NoSuchMethodException'。这很清楚,因为write
只在抽象类中定义!
第二次尝试:我覆盖了类似的write
方法XYZwriter
public class XYZwriter extends Abstractwriter {
@Override
public void write(){
super.write(args);
}
}
在这种情况下得到错误:
nested exception is java.lang.IllegalArgumentException: found more than one method on target class[XYZwriter$$EnhancerBySpringCGLIB$$1052d06a] with the annotation type [BeforeStep].
我该怎么做才能使用我的来拦截 write 方法BeanBosProcessor
?
解决方案
推荐阅读
- c# - 如何在 Unity c# 函数中等待?
- javascript - 原型链将如何断裂?
- queue - 删除循环队列中的第 K 个元素
- c++ - 'float*' 和 'float*' 类型的无效操作数到二进制 'operator*'
- android - 单击按钮后如何在线性布局内调用布局?
- jwt - 我正在尝试使用 JWT 方法访问 DocuSign API。我得到了私钥和公钥,如何获得证书?
- rest - 使用 FastAPI 的 REST、MQTT 和 gRPC 微服务?
- cross-validation - 在 Maxent 中具有更多折叠的 K 折叠交叉验证
- r - 如何在带有 dplyr 的 R 函数中的 1 个参数中使用 2 个变量
- concurrency - 如何在没有预留并发的情况下限制 AWS Lambda 实例?