我的父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 {...}
1条答案
按热度按时间vyswwuz21#
你可以试着给你的
DefaultMapper
与@ConditionalOnMissingBean(MyMapper.class)
. 然后Spring会创造DefaultMapper
除非MyMapper
包含在BeanFactory
.