2015-06-14 69 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

好的,谢谢。请将此问题标记为已回答。 –