[英]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问题:
还有一个: 在组件扫描中过滤特定的程序包
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.