繁体   English   中英

Spring Mvc注入错误(自动连接依赖项注入失败)

[英]Spring Mvc Injection Error(Injection of autowired dependencies failed)

我真的是Spring MVC的新手。 我写了一个演示(使用注解),但是不起作用。 这是我的演示的构建

public class WebInitializer extends
    AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
    return new Class<?>[] { RootConfigure.class };
}

@Override
protected Class<?>[] getServletConfigClasses() {
    return new Class<?>[] { Configure.class };
}

@Override
protected String[] getServletMappings() {
    return new String[] { "/" };
}

}

在Configure.java中,我声明“ ContackDAO” bean,如下所示:

@Configuration
@ComponentScan(basePackages = "base")
@EnableWebMvc
public class Configure extends WebMvcConfigurerAdapter {

@Bean
public ViewResolver getViewResolver() {
    InternalResourceViewResolver resolver = new   InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations(
            "/resources/");
}

@Bean
public ContactDAO getContactDAO() {
    return new ContactDAOImpl();
}
} 

在MainControl.java中。我需要使用ContackDAO,所以我这样写:

@Controller
public class MainControl {
@Autowired
private ContactDAO contactDAO;

@RequestMapping(value="/")
public String listContact() throws IOException{
    System.out.println(contactDAO.getBean());// getBean() returns "hello"
    return "hello";
}
}

当我运行此演示时,出现错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mainControl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private base.dao.ContactDAO base.contorl.MainControl.contactDAO; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [base.dao.ContactDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我的演示有什么问题? 你能帮助我吗?

我发现是否输入了代码:

@Bean
public ContactDAO getContactDAO() {
    return new ContactDAOImpl();
}

进入RootConfigure.class

@Configuration
@ComponentScan(basePackages = { "base" }, excludeFilters = { @Filter(type =     FilterType.ANNOTATION, value = EnableWebMvc.class) })
public class RootConfigure {
@Bean
public ContactDAO getContactDAO() {
    return new ContactDAOImpl();
}
}

,演示成功运行。我不知道为什么...

希望您不要错过contactDAO的二传手。

在回答您的问题之前,一个好的做法是遵循正确的包装结构。

i.e. in Your case you can put the configuration like this:

        base.dao.config 
        base.dao.impl

        base.mvc.config
        base.mvc.impl

然后将所有这些都包含在最顶层的配置中。 这样,对于每种类型的bean的配置,将分别是@Repository@Service @Controller@Controller ,这将是一个清晰的分离。

回答关于为什么的问题。 因为您要使用excludeFilters在RootConfig.java中排除mvc配置类。

检查RootConfig.java中的excludeFilters链接

您需要首先了解@EnableWebMvc的功能以及excludeFilters的功能,这在下面的链接中进行了说明

组件扫描

一些与类似问题相关的SO问题:

excludeFilters不起作用

还有一个: 在组件扫描中过滤特定的程序包

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM