我有一个带有spring组件的父spring java项目:
@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 {...}
答案 0 :(得分:0)
您可以尝试用DefaultMapper
注释@ConditionalOnMissingBean(MyMapper.class)
。然后,仅当DefaultMapper
中没有MyMapper
的其他实现时,Spring才会创建BeanFactory
。