2014-01-28 34 views
1

我想有一個委託人,可以根據字符串條件切換自動裝配服務(我對該字符串沒有任何影響)。根據條件切換自動佈線服務?

我怎麼能實現這樣的邏輯?我想到了一個委託類的,但是引入了幾個問題: - 我不能注入相同的父類型 多種服務 - 我會所有的服務注入其中大部分都沒有用,因爲總是隻有一個服務應該被採摘。

的服務應該也得到一個PROTOTYPE範圍。

我怎麼能改善以下的設計?

@Service class AbstractService; 
@Service class FirstService extends AbstractService; 
@Service class SecondService extends AbstractService; 
@Service class ThirdService extends AbstractService; 
... 

@Controller 
class Delegator { 
    @Autowired FirstService first; 
    @Autowired SecondService second; 
    @Autowired ThirdService third; 

    public AbstractService delegate(String condition) { 
     switch(String s) { 
      case caseA: return FirstService; break; 
      case caseX: return SecondService; break; 
      case caseY: return ThirdService; break; 
     } 
    } 
} 
+0

我認爲它看起來不錯。 –

回答

1

你應該能夠做到這(假設所有的服務都是單作用域):

class Delegator { 
    @Autowired 
    private Map<String, YourService> services; 
} 

有春天在地圖上通過注入bean的名稱(字符串鍵)的所有服務。

現在,如果你真的需要注入原型範圍的服務,請看這link的想法。

0

你可以注入YourService的名單到您的委託,並在你的委託方法,服務調用決定。

春季安全只是一個例子,在這裏您可以找到(認證)管理的實現 - >(認證)供應商的模式。

這一個遍歷所有供應商但那是容易改變的,如果你有你的代碼的控制。