以下是我的控制器。我的程序根據表單輸入生成一個輸出。在整個項目中,有多個輸入表單,用於生成輸出對象。所以,基本流程是一樣的。所以我想要一個單一的多動作控制器來完成所有這些。春季自動裝配變量名稱
挑戰: 1.服務類別改變。雖然所有服務都實現相同的接口,並且控制器調用相同的接口方法。 2.輸入對象改變。儘管輸入對象除setter和getter之外沒有其他方法。所以我讓他們全部實現一個空的界面。
問題:
如何更改的預選賽中,基於路徑上。我可以使用路徑變量嗎?
假設路徑有這個值 - > singleton。然後我的相應的bean名稱將是singletonService和singletonInput。我想創建一個存儲此映射信息的常量類。那麼,我可以使用Spring表達式語言在限定符內調用它嗎?例子,而不是限定符(variablePathName) - > Qualifier(getQualifierName ['variablePathName'])類似的東西?
請同時說明這個理論。據我所知,bean被創建,在請求被映射之前自動裝配...這是否意味着我試圖在這裏實現的功能根本不可能。在這種情況下,你是否會建議使用Controller-服務對來處理每個請求,並使用基本相同的代碼?但我覺得必須有某種方式來實現我想要......
代碼:
@Cotroller
@RequestMapping(value="/generate/{path}")
public class TestController {
@Autowired
@Qualifier(......)
private IService service;
@Autowired
@Qualifier(......)
IUserInput userInput;
@RequestMapping(method = RequestMethod.POST)
//Some handler method
}
謝謝。我想它會起作用。我現在懷疑的是,這將需要我配置XML(我不想),或者我可以簡單地註釋我的服務類爲@Service(「pathService」)? 我該如何註釋我的UserInput類?用@Bean(「pathUserInput」)或@Component(「pathUserInput」)? – Nikhil
你應該能夠註釋你的類,並確保它們被''拾取 - 所以不需要使用XML。 Spring使用的默認服務名稱是類名,但帶有小寫的第一個字母 - 但如果這不是您想要的名稱,則可以明確地傳遞名稱,如「@Service(」pathService「)」。你可以用你的Input對象來做同樣的事情並且註釋這些'@Component(「pathUserInput」)' –
以這種方式使用applicationContext時,我得到了NoSuchBeanDefinitionException,雖然它存在。我用'@ Component'和'@ Service'註解了類。如果我使用'@ Configuration'在基於XML/Java的配置中手動配置這些bean,它將工作......爲什麼Bean不會被ApplicationContext讀取。我錯過了什麼嗎? – Nikhil