Обновление настроенного контроллера Spring xml до аннотаций - PullRequest
0 голосов
/ 15 декабря 2011

Мне было поручено обновить старый проект, который я не написал.

Проект основан на 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);

1 Ответ

4 голосов
/ 15 декабря 2011

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

@Resource
private ServiceNameClass serviceName;

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

Также вы можете вообще пропустить определение компонента controllerName, аннотируя класс контроллера с помощью @Controller.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...