2011-12-15 3 views
0

Мне поручено обновить старый проект, который я не писал.Обновление Spring xml настроенного контроллера для аннотаций

Проект основан на Spring MVC и имеет более раннюю конфигурацию Spring Controller, с которой я не знаком.

Контроллеры имеют конфигурации боба следующим

<bean id="controllerName" class="the.project.controller.class"> 
<property name"serviceName"> 
    <ref bean="serviceName"> 
</property> 
<property name"successView"> 
    <value>viewName</value> 
</property> 
</bean> 

где SERVICENAME относится к классу с аннотацией @Service следующим

@Service(value=serviceName) 

Является ли это правильным для замены конфигурации XML?

@Autowired 
@Qualifier("serviceName") 
ServiceNameImpl serviceName 

благодаря

редактировать здесь является организация класса SERVICENAME и интерфейс

public interface ServiceName { 
    // methods omitted 
} 

@Service(value="serviceName") 
public class ServiceNameImpl implments ServiceName { 
//methods omitted 
} 

аннотаций @Resource не доступен для меня (Spring 3.0.7) и Autowire, как выше не (как представляется, этот тип не соответствует ожидаемому, как описано ниже)

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching beans of type [the.project.ServiceNameImpl] found for dependency 

Учитывая изменения, что я делаю неправильно здесь (извинения за отказ от этой информации)?

в конце концов, мне нужно, чтобы иметь возможность получить доступ к методам интерфейса и его реализация

, например

serviceName.doSomething(someVar); 

ответ

4

Это правильно, но рассмотреть вопрос об использовании private модификатора для serviceName. Другим способом было бы использовать @Resource:

@Resource 
private ServiceNameClass serviceName; 

Обратите внимание, что в этом случае вам не нужны @Qualifier("serviceName") - @Resource autowires по имени (поле), а @Autowired использует тип по умолчанию. Только проблема, когда у вас несколько бобов того же/совместимого типа.

Также вы можете пропустить определение bean-кода controllerName в целом путем аннотирования класса контроллера @Controller.

Кстати вы можете также сократить на страницу настройки XML немного, используя следующий синтаксис:

<bean id="controllerName" class="the.project.controller.class"> 
    <property name"serviceName" ref="serviceName"/> 
    <property name"successView" value="viewName"/> 
</bean> 

(IntelliJ предполагает это преобразование и выполняет его для вас).

+0

Tomasz Я, похоже, оставил важную информацию. Если у вас есть момент, вы можете изучить и обновить свой ответ? Огромное спасибо . Цель здесь - устранить как можно больше xml-конфигурации, и это последняя. – stimpy

+0

@stimpy: Поле mus должно быть типа 'ServiceName':' ServiceName serviceName'. BTW с Spring 3.1 вы можете обойтись без XML вообще! –

+0

Я уточнил вопрос более подробно. Извинения за дополнительные круги. – stimpy

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