我试图在一些 JavaEE bean 中按照模板方法模式的方式实现一些东西,这些 bean 对数据集进行一些处理工作。
每个处理 bean 接受 Job 对象,做一些工作然后为下一个 bean 返回更新后的作业(总共大约 10 个),每个 bean 有一个同名的方法(doProcessing)和一个参数(job)
我想在每个 bean 'doProcessing' 方法的开始和结束时执行一些日志记录,以便在处理结束时作业包含来自每个 bean 的日志记录信息(存储在 hashmap 等中)
我当前的实现看起来像这样......
@Stateless
public class processingTaskOne(){
public void doProcessing(Job job){
//always called at beginning of method
String beanReport = "Info from Task 1: ";
for(int i=0; i<job.getDataArray().size();i++){
beanReport+="\n some more info";
//Do some processing work here
}
//always called at end of method
job.addNewReportSection(beanReport)
}
}
但我知道我可以做得比这更好,使用继承我应该能够创建一个超类......
public abstract class Reportable{
private String sectionReport;
public void preProcessing(Job job){
//Setup bean report, use reflection to get subclass name
}
public void postProcessing(Job job){
//Finish bean report and append to job
job.addNewReportSection(sectionReport)
}
public abstract doProcessing(){
//not sure how this should work
}
}
任何扩展超类的类都将自动执行预处理/后处理操作......
@Stateless
public class processingTaskOne() extends Reportable{
public void doProcessing(Job job){
for(int i=0; i<job.getDataArray().size();i++){
super.sectionReport += "log some info"
//Do some processing work here
}
}
}
但是我一直无法弄清楚如何准确地实现这一点,因为所有示例都引用了 POJO,并且由于我的 bean 是 @Stateless,因此没有构造函数。
有人可以提供一些指导吗?我在吠叫错误的树吗?