2013-01-20 52 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(); 
    } 
}