将Spring xml配置的控制器更新为Annotations

时间:2011-12-15 14:21:37

标签: java spring spring-mvc annotations

我的任务是更新一个我没写过的旧项目。

该项目基于Spring MVC,并且具有我不熟悉的旧版Spring Controller配置。

控制器的bean配置如下

<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 个答案:

答案 0 :(得分:4)

这是正确的,但请考虑为private使用serviceName修饰符。另一种方法是使用@Resource

@Resource
private ServiceNameClass serviceName;

请注意,在这种情况下,默认情况下@Qualifier("serviceName")使用类型时,您不需要@Resource - @Autowired自动装配(字段)名称。只有当你有几个相同/兼容类型的bean时才会出现问题。

此外,您可以通过使用controllerName注释控制器类来完全跳过@Controller bean定义。

顺便说一下,您还可以使用以下语法缩短XML配置:

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

(IntelliJ建议进行此转换并为您执行此操作)。