2011-12-15 83 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 

感谢

这里

编辑是服务名类的组织和界面

public interface ServiceName { 
    // methods omitted 
} 

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

@Resource注解是不提供给我(春季3.0.7)和自动装配上面的失败(因为它看起来类型不像预期的那样)

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时,只有一个问题。

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

顺便说一句,你还可以使用下面的语法缩短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 2011-12-15 15:33:57

相关问题