2013-01-20 126 views
1

我有一个设计问题:CXF Web服务设计qestion

@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充当facade(用于GlossaryService),并且此 导致代码重复。 GlossaryService中的方法也需要位于GlossaryWebService 中,而GlossaryServiceImpl中的方法也需要位于GlossaryWebServiceImpl中!

我可以通过让GlossaryServiceImpl实现GlossaryWebService 来保存GlossaryWebServiceImpl的创建,我们将只有2个iterfaces和一个实现!

但这也成为问题,因为我希望@Secured注释(on GlossaryWebService) 仅在通过Web服务时执行,而不是在调用GlossaryServiceImpl上的方法时执行!

如果有人有任何想法的建议,这将是非常有益的! 在此先感谢。

回答

0

由于GlossaryWebServiceImpl是你的切入点accessng服务形式的Web服务的时候,我会把所有的Web服务相关的设置(角色,行吟诗人注解)的,并把所有的业务逻辑在GlossaryServiceImpl:

@WebService 
public class GlossaryWebService{ 


    private GlossaryService glossaryService; 

    @Secured("READ") 
    public void foo() { 
     glossaryService.foo(); 
    } 

    @Secured("READ") 
    public void goo() { 
     glossaryService.goo(); 
    } 
}