Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用额外注释从应用程序中扫描包含的spring引导jar的触发器组件_Spring_Spring Boot - Fatal编程技术网

使用额外注释从应用程序中扫描包含的spring引导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

我需要发布一个基于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

这很有效,因为我可以看到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