我有一个设计问题:
我将使用示例来描述该问题:
@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 个接口(interface)和一个实现!
但这也会产生问题,因为我想要 @Secured
注释(在 GlossaryWebService 上)
仅在通过 Web 服务时执行,而不是在调用 GlossaryServiceImpl 上的方法时执行!
如果有人有任何想法建议,那将会非常有帮助! 提前致谢。
最佳答案
由于 GlossaryWebServiceImpl 是您从 Web 服务访问服务时的入口点,因此我会将所有与 Web 服务相关的设置(角色、其他注释)放入其中,并将所有业务逻辑放入 GlossaryServiceImpl 中:
@WebService
public class GlossaryWebService{
private GlossaryService glossaryService;
@Secured("READ")
public void foo() {
glossaryService.foo();
}
@Secured("READ")
public void goo() {
glossaryService.goo();
}
}
关于java - Cxf Web服务设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14423034/