使用额外注释从应用程序中扫描包含的spring引导jar的触发器组件
我需要发布一个基于Spring引导的jar,它应该在其他基于Spring/Spring引导的应用程序中使用。 在我的重用jar中,我有一个用@Configuration注释的类(BusinessConfig),它给出了两个bean。此类位于重用jar的基本包中使用额外注释从应用程序中扫描包含的spring引导jar的触发器组件,spring,spring-boot,Spring,Spring Boot,我需要发布一个基于Spring引导的jar,它应该在其他基于Spring/Spring引导的应用程序中使用。 在我的重用jar中,我有一个用@Configuration注释的类(BusinessConfig),它给出了两个bean。此类位于重用jar的基本包中 @Configuration public class BusinessConfig { @Bean(name = "BusinessRepoManager") public BusinessRepoManager bu
@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
这很有效,因为我可以看到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);
}
}
有什么办法得到这份工作吗
提前谢谢 您有两个选择: 选择1 您可以通过在jar中创建包含以下内容的
META-INF/spring.factories
文件,将类转换为“自动配置”:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.your.package.BusinessConfig
现在,在使用jar的应用程序中,如果使用了@EnableAutoConfiguration
或@SpringBootApplication
注释,将处理您的配置并创建bean
如果需要为使用jar的应用程序提供更多的控制权,您可能需要使用一些@ConditionalXXX
注释对配置进行注释
有关更多信息,请参阅
选择2
您可以像尝试的那样创建自定义的@EnableXXX
注释
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(com.your.package.BusinessConfig.class)
public @interface EnableDemoBusiness {
}
太好了,它工作得很好。作为衍生问题,我有以下几点。A.消费应用程序有它的上下文,我的bean就是在这里创建的,重用jar本身没有上下文?B我使用请求范围的bean,我可以验证是否存在WebApplicationContext,然后才允许创建bean吗?我应该通过@ConditionalXXX注释来检测WebBaseApplicationContext bean吗?@siva您可以对该bean使用
@ConditionalOnWebApplication
。