使用额外注释从应用程序触发组件扫描包含的弹簧启动jar

时间:2016-11-28 13:54:17

标签: spring spring-boot

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

有没有办法让这项工作?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您有几个选择:

选项1

您可以通过在jar中创建META-INF/spring.factories文件,将您的课程变为“自动配置”,其中包含以下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.your.package.BusinessConfig

现在,在使用jar的应用程序中,如果使用@EnableAutoConfiguration@SpringBootApplication注释,将处理您的配置并创建bean。

如果需要,可能需要使用一些@ConditionalXXX注释来注释您的配置,以便为使用jar的应用程序提供更多控制。

有关详细信息,请参阅documentation

选项2

您可以像尝试一样创建自定义@EnableXXX注释。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(com.your.package.BusinessConfig.class)
public @interface EnableDemoBusiness {

}