当前位置: 首页 > 知识库问答 >
问题:

使用额外的注释从应用程序中对包含的Spring引导罐进行触发器组件扫描

郭浩穰
2023-03-14

我需要发布一个基于Spring Boot的jar,它应该在其他基于Spring/Spring Boot的应用程序中使用。在我的重用jar中,我有一个类(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个答案

班玉堂
2023-03-14

你有几个选择:

您可以将类转换为自动配置,方法是在jar中创建一个META-INF/spring.factories文件,其中包含以下内容:

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

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

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

有关更多信息,请参阅留档。

您可以创建一个自定义的@EnableXXX注释,就像您尝试的那样。

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

}
 类似资料:
  • 我们正在构建一个基于Spring的Java库,该库有几个@autowed分配,这些分配从库路径中拾取@Bean实例,在运行时检测到这些实例。 当我们直接测试应用程序(在库中使用@SpringBootApplication)时,这非常有效 然而,当我们在其他项目中将库作为依赖项包含时,它不会对库类进行组件扫描,因此@Autowired注入永远不会发生。 当然,我们可以告诉应用程序开发人员将库路径添加

  • 有一个Spring应用程序“A”打包为JAR(带有maven),应用程序“A”的POM文件包含一些定义的特定maven依赖项。 在另一个打包为JAR的spring boot应用程序“B”中,添加了应用程序“A”的依赖项,但在执行“B”时,它对应用程序“A”中提到的依赖项抛出了几个ClassNotFound/NoClassDef错误。 注意-应用程序“A”不是一个引导项目。这是一个简单的用maven

  • 我是Camel集成的初学者,我需要创建定制的Camel组件,并在Spring Boot应用程序中使用它。 我尝试使用maven原型生成我的组件。 所以命令是这样的: mvn原型:generate-DarchetypeGroupId=org。阿帕奇。骆驼ArchetypeArtifactid=camel原型组件-DarchetypeVersion=2.12.1-DgroupId=my。tcp。骆驼c

  • 问题内容: 我有几个需要用名称注释的类,因此我将注释定义为 现在,需要此注释的类定义为 我使用下面的代码来扫描注释 问题是返回的映射包含,但是我需要映射包含作为键,这是Annotation的值而不是bean名称。 有办法吗? 问题答案: 只需获取注释对象并提取值即可 让我知道是否不清楚。

  • 我编写基本java已经有一段时间了,现在正在体验Spring Boot。 在Spring引导中经常看到注释。 对我来说,注释是为了节省开发人员实现更少代码的时间,顾名思义是在线的。但这并不能满足我下面的问题 到目前为止,我正在经历@autowed。让我困惑的是@autowmed启用依赖注入并告诉bean配置xml(我还不明白它有多有用) 例如, 然而,在基本的java中,它不允许将实例作为参数传递

  • 我已经用Camel 3.9配置了一个Spring Boot2应用程序,以便通过endpoint使用Micrometer公开度量标准,并正确返回一些Camel度量标准: 通过研究mbeans,我可以看到还有一些我也感兴趣的其他度量(例如,路由平均处理时间) 问题是,我如何使Spring靴执行器+千分尺+普罗米修斯包括那些额外的度量? CamelContextConfiguration: applic