2011-04-29 99 views
2

我有一个小的MVC web应用程序,使用注释配置了控制器。如何创建使用注释可以自动装配的spring bean?

xml设置很简单。

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context.xsd"> 

<context:component-scan base-package="net.dynamic_tools.jsdependency" /> 
</beans> 

我的控制器看起来像

@Controller 
@RequestMapping("/*") 
public class JSDependencyController { 

    @Autowired 
    private ScriptTagsJSView scriptTagsJSView; 

我收到一个错误说

类型的无匹配豆[net.dynamic_tools.jsdependency.view.ScriptTagsJSView]发现依赖

我试过向Scr添加组件注释itTagsJSView

@Component("scriptTagsJSView") 
public class ScriptTagsJSView implements View { 

没有运气。我也尝试添加的配置POJO和使用@Bean注释

@Configuration 
public class Config { 
    @Bean 
    public ScriptTagsJSView getScriptTagsJSView() { 
     return new ScriptTagsJSView(); 
} 

我可能失去了一些东西很简单,但我不明白为什么这是行不通的。有任何想法吗?

+0

ScriptTagsJSView在哪个包中?组件扫描基本包仅从您指定的包向下搜索,因此如果该类在该包外部,则不会被扫描。编辑:看到我的答案下面,但也考虑上面的评论。 – Jberg 2011-04-29 14:23:55

+0

感谢您的输入。欣赏努力。原来问题是我是一个白痴。我认为它使用的xml文件不是它实际使用的xml文件。它实际使用的是从net.dynamic_tools.jsdependency.controller进行扫描,因此在net.dynamic_tools.jsdependency.view中缺少注释。注释配置似乎并不需要。 – 2011-04-30 05:01:02

+1

对于任何想要做这件事的人来说,@Component注解就是我的工作。我删除了@Configuration和@Bean类。 – 2011-04-30 05:03:20

回答

2

我想你可能只需要在你的xml中使用<context:annotation-config/>

2

首先,您要使用注释驱动标签。 这将确保春季实例与 @Controller,@Repository,@Service和@Component

<mvc:annotation-driven /> 

注释您还需要组件扫描,但你已经拥有它的所有类。

你可能也想避免给你的豆名称,因为春天只是基于类型匹配。 (不要使用@Component(“scriptTagsJSView”)而只是@Component)

最后,您需要在需要注入的地方添加@Autowired。 我个人仅将它与构造函数结合使用。

public class JSDependencyController { 
    @Autowired 
    public JSDependencyController(ScriptTagsJSView view){ 
     this.view = view; 
    } 
} 
相关问题