2014-11-25 4 views
3

Я переношу webapp с весны 2.5 на весну 4, но я нашел проблему. У меня есть два разных URL-адреса, которые работают для двух разных конфигураций того же класса. В моей старой версии, у меня есть что-то вроде:Spring 4 @controller config

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="mappings"> 
      <props> 
       <prop key="/url1.htm">bean1</prop> 
       <prop key="/url2.htm">bean2</prop> 
       </props> 
      </property> 
    </bean> 

и бобы являются чем-то вроде

<bean id="bean1" class="com.package.Controller" scope="session"> 
    <property name="property" value="value of property"/> 
</bean> 
<bean id="bean2" class="com.package.Controller" scope="session"> 
    <property name="property" value="a different value of the same property"/> 
</bean> 

Как я мог бы сделать это с аннотациями?

+0

И почему вы должны отказаться от этого? Тот факт, что вы используете Spring 4, не означает, что «SimpleUrlHandlerMapping» следует отказаться. Если у вас есть допустимый прецедент, пожалуйста, продолжайте использовать 'Controller' вместо' @ Controller'. –

+0

Но он по-прежнему доступен также весной 4 ?? Как настроить его в моем аннотированном классе @Configuration? – Miscillo

+0

Просто создайте экземпляр и заполните сопоставления. –

ответ

1

Используйте аннотацию @Controller для вашего класса контроллера и карты /url1.htm и /url2.htm с аннотацией @RequestMapping. Посмотрите Spring Reference @RequestMapping.

вы получите что-то вроде этого:

@Controller 
@RequestMapping("/url1.htm") 
public class bean1{ 

} 
@Controller 
@RequestMapping("/url2.htm") 
public class bean2{ 

} 

и установить свойство компонента в каждом классе. Если вы не хотите, чтобы дублировать методы, которые вы можете сделать, как этот

@Controller 
public class bean1{ 

    @RequestMapping("/url{id}.htm") 
    public void setBeanProp(@PathVariable int id){ 
    if (id.equals(1)) 
    ... 
    else 
    ... 


    } 
+0

Да. Я знаю это. Я бы хотел не дублировать все методы в каждом компоненте, потому что для меня это пустая трата времени и усложняет только последующее обслуживание. – Miscillo

+0

«Дублировать все методы»? Что вы имеете в виду, какие методы вы дублируете? Если в классах контроллеров есть методы, которые вы хотите добавить в оба, вы можете поместить их в класс и заставить оба контроллера расширять этот класс. – Jesper