2015-06-14 2 views
0

Я использую контроллеры Spring MVC, и я хотел бы сделать некоторые дополнительные методы отображения запросов, доступные во время разработки. Я могу сделать это с помощью профилей пружины:По умолчанию Весна боба, когда профиль нет

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

} 

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

} 

Но в идеале, я предпочел бы не загрязнять код с аннотациями со ссылкой на „производстве классов Dev“ профиль.

Я думаю, возможно, это возможно с использованием Первичной аннотации, но я не могу заставить ее работать. This post кажется, что это должно работать:

@Controller 
public class DefaultController { 

} 

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

} 

Но когда я делаю это, Spring пытается загрузить оба контроллера при запуске под «Dev» профиль, и не с

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. Держите классы отдельно. Не распространяйте DevController на DefaultController, даже если содержимое такое же.

+0

Да, это работает. Я взял весь код из 'DefaultController' и поместил его в' AbstractController'. И 'DefaultController', и' DevController' теперь расширяют 'AbstractController'. Это все еще не очень чисто. Возможно, я просто скопирую и вставлю код из 'DefaultController' в' DevController' или просто придерживаюсь моего исходного '@Profile ("! Dev ")'. –

+0

ОК, спасибо. отметьте этот вопрос как ответ. –

Смежные вопросы