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

Spring中的多种实现

拓拔嘉运
2023-03-14
public interface TopicGenerator {
    File create(MultiValueMap params);
    boolean accept(MultiValueMap params);
}
@RequiredArgsConstructor
public class JavaTopicGenerator implements TopicGenerator {
//implementation ommited for readability

@RequiredArgsConstructor
public class PhpTopicGenerator implements TopicGenerator {
//implementation ommited for readability

@RequiredArgsConstructor
public class CppTopicGenerator implements TopicGenerator {
//implementation ommited for readability
@RequiredArgsConstructor
public class TopicFacade {

    @NonNull
    private final TopicService topicService;

    @NonNull
    private final List<TopicGenerator> topicGenerators;

    public void generate(MultiValueMap<String, String> params, HttpServletResponse response) {
        for (TopicGenerator topicGenerator : topicGenerators) {
            if (topicGenerator.accept(params)) {
                File tempFile = topicService.generate(params);
                //do something else.
            }
        }
    }
}
@Service
@RequiredArgsConstructor
public class TopicServiceImpl implements TopicService {

    @NonNull
    private final List<TopicGenerator> reportGenerators;

        public File generate(MultiValueMap params) {
        for (TopicGenerator topicGenerator : topicGenerators) {
            if (topicGenerator.create(params)) {
                return topicGenerator.export(params);
            }
        }

我得到一个错误,如:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“topic serviceimpl”的bean时出错:通过字段“topic generators”表示的未满足的依赖项;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:没有“java.util.list ”类型的合格bean可用:至少需要一个合格的自动候选bean。依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}

(早些时候,当我使用字段注入而不是构造函数时,我能够在3个实现中的一个之前添加@service,代码正在工作,但这不是我想要的。)

共有1个答案

韦修文
2023-03-14

可以定义list 类型的bean,如下所示:

@Configuration
public class AppConfig {

    @Autowired
    private TopicGenerator cppTopicGenerator;

    @Autowired
    private TopicGenerator phpTopicGenerator;

    @Autowired
    private TopicGenerator javaTopicGenerator;

    @Bean
    public List<TopicGenerator> topicGeneratorList()
    {
        return Arrays.asList(cppTopicGenerator, phpTopicGenerator, javaTopicGenerator);
    }
}

这样,您的原始代码就可以正常工作了。

bean可以用它们各自的类名的camelCase来引用。例如,cppTopicGenerator将引用类cppTopicGenerator.java的bean。虽然使用@qualifier更清晰是一个好的做法。

 类似资料:
  • 本文向大家介绍基于spring 方法级缓存的多种实现,包括了基于spring 方法级缓存的多种实现的使用技巧和注意事项,需要的朋友参考一下 方案实施 1、 spring和ehcache集成 主要获取ehcache作为操作ehcache的对象。 spring.xml中注入ehcacheManager和ehCache对象,ehcacheManager是需要加载ehcache.xml配置信息,创建ehc

  • 我试图研究Spring更具体的Spring数据,但我对interface Repository及其派生类的使用有一个问题,我请求您帮助澄清这些问题。 例如,我看到这个代码示例扩展CrudRepository,但我看到使用扩展关键字,但没有实现。为什么?我认为扩展是针对子类的,或者如果我使用抽象类和接口实现。 另一个问题是测试我尝试从两个类扩展的另一个案例(我知道java不允许多个),但java允许

  • 本文向大家介绍详解Spring学习总结——Spring实现AOP的多种方式,包括了详解Spring学习总结——Spring实现AOP的多种方式的使用技巧和注意事项,需要的朋友参考一下 目录 一、基于XML配置的Spring AOP 二、使用注解配置AOP 三、AspectJ切点函数 四、AspectJ通知注解 五、零配置实现Spring IoC与AOP AOP(Aspect Oriented Pr

  • 在SpringMVC请求头中可以有多种内容类型吗?我要通过: 通过邮递员到我的API。目前,我得到了

  • 本文向大家介绍详解ListView中多种item的实现方式,包括了详解ListView中多种item的实现方式的使用技巧和注意事项,需要的朋友参考一下 大家都知道在实际开发时,对ListView的使用比较频繁,其表现也非常复杂。本文将通过实例介绍ListView中多种item的实现方式,下面来一起看看吧。 使用ListView一般步骤: 设置显示的ListView,设置显示的每一项item的vie

  • 我有多模块maven项目,每当我运行它时,我都会得到以下错误: 但是上面的解决方案对我都不起作用。 下面是模块的pom.xml: 下面是模块的依赖关系树: