[英]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.