spring.factories

这篇具有很好参考价值的文章主要介绍了spring.factories。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Boot 如何管理第三方Bean

  • 首先抛出一个问题:如果想要被Spring容器管理的Bean的路径不再Spring Boot 的包扫描路径下,怎么办呢?也就是如何去加载第三方的Bean 呢?
  • 换句话说:在 Spring Boot 项目中,如果你想要被 Spring 容器管理的 bean 不在 Spring Boot 包扫描路径下,怎么办?
Spring Boot 管理Bean
  • @ComponentScan 注解的作用是扫描 @SpringBootApplication 所在的 Application 类所在的包(basepackage)下所有的
  • @component 注解(或拓展了 @component 的注解)标记的 bean,并注册到 spring 容器中。

如何解决Spring Boot不能被默认路径扫描

@Import 、spring.factories 两种方式
  • 在 Spring Boot 主类上使用 @Import 注解
  • 使用 spring.factories 文件
方式一 @Import 注解 示例

SwaggerConfig 代码

@Configuration
@EnableSwagger2
public class SwaggerConfig implements EnvironmentAware {
    private static final Logger log = LoggerFactory.getLogger(SwaggerConfig.class);
    @Autowired
    private Environment env;
    @Value("${swagger.scan.package}")
    private String swaggerScanPackage;

    public SwaggerConfig() {
    }

    @Bean
    public Docket createRestApi() {
        Predicate<String> path = PathSelectors.any();
        if (Arrays.asList(this.env.getActiveProfiles()).contains("prod")) {
            path = PathSelectors.none();
        }

        log.info("####初始化createRestApi####swaggerScanPackage:" + this.swaggerScanPackage);
        log.info(path.toString());
        return (new Docket(DocumentationType.SWAGGER_2)).apiInfo(this.apiInfo()).select().apis(RequestHandlerSelectors.basePackage(this.swaggerScanPackage)).paths(PathSelectors.any()).build();
    }

    private ApiInfo apiInfo() {
        log.info("##################################初始化API信息################################################");
        return (new ApiInfoBuilder()).title("APIs").description("…………").termsOfServiceUrl("https://js.dazhi.loan.com").version("1.0").build();
    }

    @Override
    public void setEnvironment(Environment environment) {

    }
}

工程结构
spring.factories
测试启动

  • 发现我的SwaggerConfig 类和 SpringBoot 的启动类ConfigApplication.java 不在同一级目录下,所以当Spring Boot 自动扫描包的时候,是扫描不到我的SwaggerConfig 的配置的,也就在控制台没有Swagger的打印的信息:
    spring.factories
    加载到Spring容器中的话 要怎么办呢?下面介绍两种方式
    在Spring Boot Application 主类上 使用@Import 注解
    spring.factories
    启动就可以看到Swagger的基础信息:
    spring.factories
方式二 新建spring.factories文件

采用spring.factories 的方式去加载SwaggerConfig类,在resources目录下新建一个META-INF 的目录,然后在新建一个spring.factories 的文件,里面的内容为:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.sg.config.SwaggerConfig

然后在把Spring Boot 启动类上的@Import注释掉,启动发现也可以把SwaggerConfig加载到Spring 容器中
spring.factories

总结

SpringFactoriesLoader 类,这个类实现了检索 META-INF/spring.factories 文件,并获取指定接口的配置的功能。在这个类中定义了两个对外的方法:

由于@ComponentScan 注解只能扫描 spring-boot 项目包内的 bean 并注册到 spring 容器中,因此需要 @EnableAutoConfiguration 注解来注册项目包外的bean。而 spring.factories 文件,则是用来记录项目包外需要注册的bean类名。文章来源地址https://www.toymoban.com/news/detail-473689.html

到了这里,关于spring.factories的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring篇】IOC/DI配置管理第三方bean

    🍓系列专栏:Spring系列专栏 🍉个人主页:个人主页 目录 一、案例:数据源对象管理 1.环境准备 2.实现Druid管理 3.实现C3P0管理 二、加载properties文件 1.第三方bean属性优化 2.读取单个属性 3.注意事项   三、核心容器 1.环境准备 2.容器   1.容器的创建方式 2.Bean的三种获取方式 3.容器

    2024年02月02日
    浏览(55)
  • 从入门到精通:掌握Spring IOC/DI配置管理第三方bean的技巧

    以后我们会用到很多第三方的bean,我们以数据源是 Druid(德鲁伊) 和 C3P0 来配置举个例子。 1.1.1 环境准备 先来准备下案例环境: 1.1.2 思路分析 需求:使用Spring的IOC容器来管理Druid连接池对象 1.使用第三方的技术,需要在pom.xml添加依赖 2.在配置文件中将【第三方的类】制作成一个

    2024年02月02日
    浏览(47)
  • 如何在Spring Boot中优雅地重试调用第三方API?

    🎉如何在Spring Boot中优雅地重试调用第三方API? ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果文中出现错误,

    2024年02月05日
    浏览(105)
  • spring.factories

    Spring Boot 如何管理第三方Bean 首先抛出一个问题:如果想要被Spring容器管理的Bean的路径不再Spring Boot 的包扫描路径下,怎么办呢?也就是如何去加载第三方的Bean 呢? 换句话说:在 Spring Boot 项目中,如果你想要被 Spring 容器管理的 bean 不在 Spring Boot 包扫描路径下,怎么办?

    2024年02月08日
    浏览(25)
  • spring.factories 文件配置详情

    在程序开发中,可能会出现包名不一样的情况(如:pom 依赖的很多的 jar),如何解决Spring Boot不能被默认路径扫描呢? 方法一:在 Spring Boot Application 主类上使用 @Import 注解。 方法二:使用 spring.factories 文件 方法一比较简单,在此就不做过多介绍,主要谈谈 spring.factories 使

    2024年02月01日
    浏览(34)
  • Spring的Factories机制介绍

    Java 的 SPI 机制 Java SpringBoot 加载 yml 配置文件中字典项 Spring的Factories就是Spring版本的Java Spi。 Spring Factories的最重要的功能就是:可以通过配置文件指定Spring容器加载一些特定的组件。 Spring Factories是一种类似于Java SPI的机制,它在META-INF/spring.factories文件中配置接口的实现类名

    2023年04月21日
    浏览(22)
  • spring-boot-autoconfigure.jar/META-INF/spring.factories介绍

      spring-boot-autoconfigure.jar/META-INF/spring.factories 是Spring Boot自动配置的核心文件,它包含了各种自动配置类的注册信息。这个文件是Spring Boot根据应用程序的依赖关系和配置文件中的条件注解,自动加载和配置所需的Bean的依据。 在 spring.factories 文件中,每个自动配置类都对应一

    2024年02月06日
    浏览(40)
  • SpringApplication对象的构建及spring.factories的加载时机

    构建SpringApplication对象源码: 1、调用启动类的main()方法,该方法中调用SpringApplication的run方法。 2、调用SpringApplication的run()方法的重载方法,在发方法内构建了SpringApplication对象 3、构建SpringApplication对象。 构建过程: 接下来我们来详细研究一下上述过程。在构建SpringApplication对

    2024年02月14日
    浏览(36)
  • Springboot自动装配:三个注解、Selector、spring.factories文件、@ConditionalOnProperty注解

    借鉴: 这个链接是包含run方法进来debug看整个过程的,建议先看:https://www.cnblogs.com/starsray/p/15580915.html https://blog.csdn.net/fengxiandada/article/details/130080828 1.创建springboot应用 如何创建一个spring boot应用?这就很简单了,可以使用idea自带的spring initializr帮助我们选择相应的场景启动

    2024年01月22日
    浏览(46)
  • 【SpringBoot系列】Spring Boot Bean Factory的生命周期 Spring Boot学习大纲,可以留言自己想了解的技术点

    继续完成既定的任务,走起 可以概括为以下步骤: 资源加载:Spring Boot 应用程序启动时,会扫描指定的路径,加载配置文件和类文件等资源。 配置加载:Spring Boot 会根据配置文件(比如 application.properties)中的配置,创建一个 Environment 对象,用于保存应用程序的配置信息。

    2024年02月05日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包