有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpring实现了多个不同的接口,但每个接口都扩展了相同的接口

public interface DownloaderActivity {
    void execute(Map<String, Object> param);
}

@Component(value = "updateState")
@Qualifier("updateState")
public interface UpdateStateActivity extends DownloaderActivity {
}

public class UpdateStateTask implements UpdateStateActivity {
    private final String TASK_NAME = "initUpdateState";
    @Override
    public void execute(Map<String, Object> param) {
        log.info("UpdateStateTask working.");
    }
}

@Configuration
public class ActivityConfig {
    @Autowired
    List<DownloaderActivity> downloaderActivity;
    @Autowired
    private static Map<String, DownloaderActivity> activities;

    public static class ActivityFactory {
        private static volatile ActivityFactory INSTANCE = new ActivityFactory();
        private ActivityFactory() {}

        public DownloaderActivity getActivity(final String name) {
            return activities.get(name);
        }

        public static ActivityFactory getInstance() {
            return INSTANCE;
        }
    }
}

public class UpdateState {
    public void process() throws Exception {
        DownloaderActivity update = ActivityConfig.ActivityFactory.getInstance().getActivity(name());
        update.execute(variables);
    }
}

我们的期望是我们必须得到所有活动的清单

但程序在启动时失败并出现错误

ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'activityConfig': Unsatisfied dependency expressed through field 'downloaderActivity'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.List<.DownloaderActivity>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

实现类是否缺少注释(组件和限定符)

但是我们在UpdateStateActivity上添加了注释,这样业务实现就不会依赖于spring框架。所有接口都在不同的库中,实现在另一个库中。如果在我们的类中需要一个实现类,那么我们可以使用不同的工厂类来提供Springbeans。 ActivityFactory类是为获取与活动相关的实现的Springbean而创建的,请检查类UpdateState我们如何使用ActivityFactory提供bean实例


共 (0) 个答案