【问题标题】:Updating Spring xml configured controller to Annotations将 Spring xml 配置的控制器更新为注释
【发布时间】:2011-12-15 14:21:37
【问题描述】:

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

该项目基于 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);

【问题讨论】:

    标签: java spring spring-mvc annotations


    【解决方案1】:

    没错,但请考虑将private 修饰符用于serviceName。另一种方法是使用@Resource:

    @Resource
    private ServiceNameClass serviceName;
    

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

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

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

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

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

    【讨论】:

    • Tomasz 我似乎遗漏了重要信息。如果您有时间可以检查并更新您的答案吗?非常感谢 。这里的目标是尽可能多地消除 xml 配置,这是最后一个。
    • @stimpy:该字段必须是ServiceName 类型:ServiceName serviceName。顺便说一句,使用 Spring 3.1,您可以完全不用 XML!
    • 我更详细地更新了这个问题。为额外的圈数道歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多