当前位置: 首页 > 知识库问答 >
问题:

自动连接只有一个实现的接口-未满足的bean依赖性

谈灵均
2023-03-14

我的Spring MVC Web应用html" target="_blank">程序中有这个控制器,

@Controller
@RequestMapping("/spittles")
public class SpittleController {

    private SpittleRepository spittleRepository;

    @Autowired
    public SpittleController(SpittleRepository spittleRepository) {

        this.spittleRepository = spittleRepository;
    }

    public String spittles(Model model) {

        model.addAttribute(spittleRepository.findSpittles(Long.MAX_VALUE, 20));

        return "spittles";
    }

}

其中SpitleRepository是一个接口:

public interface SpittleRepository {

    List<Spittle> findSpittles(long max, int count);

}

其中,SpitleRepository的实现如下:

@Component
public class SpittleRepositoryImpl
    implements SpittleRepository {

    @Override
    public List<Spittle> findSpittles(long max, int count) {

        List<Spittle> spittles = new ArrayList<Spittle>();
        for (int i = 0; i < count; i++) {
            spittles.add(new Spittle("Spittle" + i, new Date()));
        }
        return spittles;

    }

}

即使我已经自动装配,我得到:

组织。springframework。豆。工厂UnsatifiedDependencyException:创建名为“SpitleController”的bean时出错,该bean在文件[C:\java\Workspace\default.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Chapter5 BuildingSpringWebApplications\WEB-INF\classes\org\spittr\WEB\SpitleController.class]中定义:通过索引为0的构造函数参数表示的未满足的依赖关系[org.spittr.data.SpittleRepository]::未找到符合依赖项类型[org.spittr.data.SpittleRepository]的合格bean:应至少有1个bean符合此依赖项的autowire候选。依赖项注释:{};嵌套异常为org。springframework。豆。工厂NoSuchBeanDefinitionException:找不到符合依赖关系的[org.spittr.data.SpittleRepository]类型的bean:应至少有一个bean符合此依赖关系的autowire候选。依赖项批注:{}

其中java配置文件为:

@Configuration
@EnableWebMvc                   // Enable Spring MVC
@ComponentScan(basePackages={"org.spittr"})
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver viewResolver() {

        InternalResourceViewResolver resolver =
            new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);

        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer 
    configurer) {

        /* configure static content handling */
        configurer.enable();
    }



}

项目结构如下:

RootConfig:

@ComponentScan(basePackages = { "org.spittr" }, 
               excludeFilters = { @Filter(type = FilterType.ANNOTATION, 
                                          value = EnableWebMvc.class) })
public class RootConfig {

}

SpitrWebAppInitializer。java:

public class SpittrWebAppInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {

        return new Class<?>[] { RootConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // Specify configuration class
        return new Class<?>[] { WebConfig.class };
    }

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

}

共有2个答案

宋高扬
2023-03-14

老实说,我不知道为什么清洁和建设解决了这个问题。

宣望
2023-03-14

我认为问题是要扫描的包-它没有正确定义,尝试切换到:

main.java.org.spittr

或者使用下面的方法来代替——我认为它不太容易出错。

basePackageClasses = {Spittle.class}

问候,迈克尔

 类似资料:
  • 当我在实现的bean中取消对接口的注释时,服务器启动时不会出现任何错误。我错过了什么?

  • 有没有可能让一个Spring Bean实现两个接口,并能够使用任何一个接口自动连接Bean? 一个实现两个服务的类 我正在获取: 原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到依赖项[ServiceB]的[ServiceB]类型的合格bean:需要至少有一个bean可以作为此依赖项的自动候选项。依赖项批注

  • 问题内容: 背景: 我有一个Spring 2.5 / Java / Tomcat应用程序。下面的bean在整个应用程序中的许多地方都使用过 以下是新的bean: 第一个bean的配置如下(包含了软件包中的所有bean) 第二个(新)bean是单独配置的 启动服务器时,这(当然)会导致异常: 从试图像这样自动装配bean的类中 因为有两个bean实现相同的接口。 问题: 是否可以配置Bean,以便

  • 我有一个spring 2.5/Java/Tomcat应用程序。下面有一个bean,在整个应用程序的许多地方都使用了这个bean 和以下新bean: 第一个bean是这样配置的(包中的所有bean都包含在内) 第二个(新的)bean是单独配置的 这会导致(当然)启动服务器时出现异常: 嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitio

  • 我正在尝试实现一个quarkus-extension用于授权/认证。我使用现有的< code > quar kus-small rye-jwt-abx -扩展作为例子。一切似乎都很好,除了我不能注入< code>Principal: 我得到了 对 java.security.主体和限定符类型未满足的依赖关系 [@Default] 注入