我有一个设计问题:
我将使用一个例子来描述这个问题:
@WebService
public interface GlossaryWebService {
@Secured("READ")
public void foo();
@Secured("READ")
public void goo();
}
执行:
@WebService
public class GlossaryWebServiceImpl implements GlossaryWebService{
private GlossaryService glossaryService;
@Override
public void foo() {
glossaryService.foo();
}
@Override
public void goo() {
glossaryService.goo();
}
}
界面:
public interface GlossaryService {
public void foo();
public void goo();
}
执行:
public Class GlossaryServiceImpl extends GlossaryService{
@Override
public void foo() {
// impl
}
@Override
public void goo() {
// impl
}
}
如您所见,我们已经 GlossaryWebServiceImpl 实现了 GlossaryWebService 和 GlossaryServiceImpl 实现了 GlossaryService!
问题是 GlossaryWebServiceImpl 充当外观(对于 GlossaryService),这会导致代码重复。GlossaryService 中的方法也需要在 GlossaryWebService 中,GlossaryServiceImpl 中的方法也需要在 GlossaryWebServiceImpl 中!
我可以通过让 GlossaryServiceImpl 来实现 GlossaryWebService 来保存 GlossaryWebServiceImpl 的创建,这样我们将只有 2 个 iterfaces 和一个实现!
但这也会产生问题,因为我希望@Secured
仅在通过 Web 服务而不是在调用 GlossaryServiceImpl 上的方法时才执行注释(在 GlossaryWebService 上)!
如果有人有任何想法建议,那将非常有帮助!提前致谢。