spring依赖注入,子项目提供接口实现

ee7vknir  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(302)

我的父spring java项目有一个spring组件:

@Component
public class MyJobRunner {

    private JobLauncher jobLauncher;
    private MyMapper mapper;

    @Autowired
    public MyJobRunner (JobLauncher jobLauncher, MyMapper mapper) {
        this.jobLauncher = jobLauncher;
        this.mapper= mapper;
    }

然后我有单独的项目,将这个父项目作为依赖项导入并使用上面的类。这些单独的项目需要提供 MyMapper 应使用注解的接口 @Component .
我的问题是我的父项目主应用程序失败,因为我没有实现,所以无法自动连线。
除了在父项目中提供默认实现之外,还有什么方法可以让应用程序启动并运行吗?如果我在父项目中提供了一个默认实现,但是没有 @Component .
提出这个问题是因为上述情况迫使我补充 @Primary 在所有单独的项目上覆盖 DefaultMapper 在父项目中实现,理想情况下我希望避免 @Primary 因为有些人可能会忘记注解它。

//parent project 
@Component
public class DefaultMapper implements MyMapper {...}

//projectA
@Primary
@Component
public class ProjectAMapper implements MyMapper {...}

//projectB
@Primary
@Component
public class ProjectBMapper implements MyMapper {...}
vyswwuz2

vyswwuz21#

你可以试着给你的 DefaultMapper@ConditionalOnMissingBean(MyMapper.class) . 然后Spring会创造 DefaultMapper 除非 MyMapper 包含在 BeanFactory .

相关问题