在Spring Java配置中按名称导入

时间:2017-10-26 11:40:38

标签: spring spring-java-config

假设我有3个Spring / Maven项目:

  • api-spec:包含界面MyService
  • api-impl:包含实现MyServiceImpl的类MyService。还包含类MyServiceConfiguration,它是一个Spring @Configuration,它定义了一个类型为MyServiceImpl的bean。
  • main:包含Spring Java应用程序设置(例如@SpringBootApplication)。它有一个带有@Autowired MyService myService字段的bean,它的配置类用@Import(MyServiceConfiguration.class)注释。

我希望main - 项目将api-spec作为Maven compile依赖项,并将api-impl作为runtime依赖项(以防止我们)从错误地制作"从main项目到api-impl项目的艰难"依赖关系。这是不可能的,因为@Import采用Class es的数组 - 例如:@Import(MyServiceConfiguration.class)。我想要@Import("my.package.MyServiceConfiguration")之类的东西。

使用类路径扫描不是一个选项(我们已经看到太多的bean被意外拾取),我宁愿不必使用XML文件。我们可以使用SpringApplicationBuilder.source(..),因为它接受一个类名作为字符串 - 但我找不到在我的测试中使用它的方法......

1 个答案:

答案 0 :(得分:0)

编译时检查是java配置的优点之一,所以我认为用Java做这样的思考是不可能的。至于我,你应该使用XML来处理这个问题。这并不意味着您应该使用XML进行所有配置,api-impl模块的大多数bean都可以使用Java并且只是导入到XML,而这些bean只是您将在运行时更改的bean。

如果您不想使用XML,则可以考虑使用Groovy配置:

https://spring.io/blog/2014/03/03/groovy-bean-configuration-in-spring-framework-4