我需要发布一个基于Spring引导的jar,它应该在其他基于Spring / Spring引导的应用程序中使用。 在我的重用jar中,我有一个用@Configuration注释的类(BusinessConfig),它给出了两个bean。该类位于重用jar的基础包中。
@Configuration
public class BusinessConfig {
@Bean(name = "BusinessRepoManager")
public BusinessRepoManager businessRepoManager(){
return BusinessRepoManager.getInstance();
}
@Autowired
@Bean(name = "CustomerManager")
@Scope("request")
public CustomerManager customerManager(BusinessRepoManager busrepoManager){
return CustomerManager.getInstance();
}
}
在第二个应用程序中,我添加了依赖项,在应用程序类中我有语句
@ComponentScan(basePackageClasses = {BusinessConfig.class})
通知Spring上下文以查找BusinessConfig类中提供的bean。
这很有效,因为我可以看到豆子被创建了。
如果所有使用的应用程序都知道我的配置所在的类名/包名,是否有可能简化此操作。 我尝试在jar项目中创建自定义注释,并在消费应用程序中使用它。
@ComponentScan(basePackageClasses = {BusinessConfig.class})
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Component
public @interface EnableDemoBusiness {
}
然后在我的消费应用程序中,我刚刚添加了
@EnableDemoBusiness
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
有没有办法让这项工作?
提前致谢!
答案 0 :(得分:1)
您有几个选择:
您可以通过在jar中创建META-INF/spring.factories
文件,将您的课程变为“自动配置”,其中包含以下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.your.package.BusinessConfig
现在,在使用jar的应用程序中,如果使用@EnableAutoConfiguration
或@SpringBootApplication
注释,将处理您的配置并创建bean。
如果需要,可能需要使用一些@ConditionalXXX
注释来注释您的配置,以便为使用jar的应用程序提供更多控制。
有关详细信息,请参阅documentation。
您可以像尝试一样创建自定义@EnableXXX
注释。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(com.your.package.BusinessConfig.class)
public @interface EnableDemoBusiness {
}