2015-06-14 109 views
0

我正在使用Spring MVC控制器,並且我想在開發過程中提供一些額外的請求映射方法。我可以做到這一點使用Spring配置文件:當配置文件不存在時,默認的Spring bean

@Controller 
@Profile("!dev") 
public class DefaultController { 

} 

@Controller 
@Profile("dev") 
public class DevController extends DefaultController { 

} 

但理想情況下,我寧願不污染生產類開發‘配置文件註釋指的是代碼’。

我想也許這是可能的使用主註釋,但我不能得到它的工作。 This post似乎是說,這應該工作:

@Controller 
public class DefaultController { 

} 

@Controller 
@Profile("dev") 
@Primary 
public class DevController extends DefaultController { 

} 

但是,當我做到這一點,春天試圖當它在「開發」的個人資料啓動時加載兩個控制器和失敗,

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0' 
... 
There is already 'defaultController' bean method 

我想做什麼?如果是這樣,我該怎麼做?

回答

1

這裏的問題在於,您的類DevController繼承自DefaultController。保持課程分開。即使內容相同,也不要將DevControllerDefaultController延伸。

+0

是的,這有效。我已經從'DefaultController'獲取了所有的代碼,並將其放入'AbstractController'中。 'DefaultController'和'DevController'現在都擴展了'AbstractController'。但它仍然不是很乾淨。也許我只是將'DefaultController'中的代碼複製並粘貼到'DevController'中,或者僅僅使用我的原始'@Profile(「!dev」)'。 –

+0

好的,謝謝。請將此問題標記爲已回答。 –