2016-08-05 91 views
2

我也有同樣的maven父模塊像在網絡和核心項目的組合@RestController類,春 - 需要自動裝配在@Component類

家長 - 網(com.parent.test.web) - 核心(com.parent.test.core)

我想是指在覈心項目網絡模塊依賴調用一些從網絡模塊

Web項目樣本的API,

com.test.parent.web 

public interface RestInterface { 
    public ResponseEntity load(); 
} 

@RestController 
public class RestInterfaceImpl implements RestInterface { 

    @Override 
    @RequestMapping(value = "/getData", method = RequestMethod.GET, produces = APPLICATION_JSON) 
    public @ResponseBody ResponseEntity<Object> load() { 

    } 
} 

核心工程樣本,

com.test.parent.core 

@Component 
public class CoreImpl implements CoreInterface { 

    // Is this possible to autowire 
    @Autowired 
    private RestInterface restInterface; 

    public boolean getOptions() { 
     ResponseEntity<Object> results = restInterface.load(); 
     for (Object o : results) { 
      //TODO 
     } 
    } 
} 

因爲項目是相同的父POM模塊中開發。所有的項目將被分組到一個彈簧桶中,並將部署到相同的環境中。因此,我想將Web項目依賴項引用到核心項目中,並嘗試掃描核心項目中的Web類。

我想獲得的幾件事情澄清,

  • 這是不是好辦法?
  • 如果是好方法,我們該如何實現?
  • 如果不是那麼什麼是正確的方法?
+0

您確定您的意思是將web模塊項目添加爲核心項目中的依賴項嗎?並調用一個API不需要依賴添加。你的意思是什麼? –

+0

是的。我將接口稱爲依賴關係,而不是訪問Web模塊uri。通過標題來自動化將Web模塊spring bean類自動裝配到Spring核心項目中。 – user3095047

回答

4

恕我直言,這絕對不是一個正確的做法。關注點分離原則指出,控制器應該只是一小段代碼,它們從請求中獲取參數,將它們傳遞給業務類,並轉發到將顯示結果的視圖。

如果您需要從核心類中調用控制器的某些方法,這意味着您的Fat Ugly Controller中攜帶了業務方法。正確的方法是將Web部件=>控制器與業務部件=>服務層分開。

這樣你就可以創建一個服務bean,該服務bean將在(現在很瘦)的控制器和其他需要調用其方法的核心類中自動裝配。

+0

如果我們使用Websocket,並且想要在控制器中自動裝配我們的SimpMessagingTemplate(因爲它顯然不能在服務類中自動裝配 - 現在有此問題),那麼我需要從應用程序內部調用控制器方法來發送一個SimpMessagingTemplate通過websockets到別的地方? - 我曾經通過在應用程序內模擬REST調用來做到這一點,現在我想在一個服務中實現這一點,但我無法使它工作 – Sytham