簡體   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