溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring Boot 之spring.factories

發(fā)布時間:2020-07-25 10:39:05 來源:網(wǎng)絡(luò) 閱讀:1705 作者:龍愛海 欄目:編程語言
1.首先拋出一個問題:如果想要被Spring容器管理的Bean的路徑不再Spring Boot 的包掃描路徑下,怎么辦呢?也就是如何去加載第三方的Bean 呢?

有兩種方式可以解決:
這里我們使用Swagger的配置來做實(shí)驗(yàn)。
1:首先一個Swagger的配置類:SwaggerConfig
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) {

    }
}

2:再看我的工程結(jié)構(gòu)吧:
Spring Boot 之spring.factories
發(fā)現(xiàn)我的SwaggerConfig 類和 SpringBoot 的啟動類ConfigApplication.java 不在同一級目錄下,所以當(dāng)Spring Boot 自動掃描包的時候,是掃描不到我的SwaggerConfig 的配置的,也就在控制臺沒有Swagger的打印的信息:

Spring Boot 之spring.factories

所以這時候我如果想要把SwaggerConfig 加載到Spring容器中的話 要怎么辦呢?下面介紹兩種方式
①:在Spring Boot Application 主類上 使用@Import 注解
Spring Boot 之spring.factories

啟動就可以看到Swagger的基礎(chǔ)信息:
Spring Boot 之spring.factories

②:現(xiàn)在我們將其改造一下,采用spring.factories 的方式去加載SwaggerConfig類,在resources目錄下新建一個META-INF 的目錄,然后在
新建一個spring.factories 的文件,里面的內(nèi)容為:

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

然后在把Spring Boot 啟動類上的@Import注釋掉,啟動發(fā)現(xiàn)也可以把SwaggerConfig加載到Spring 容器中
Spring Boot 之spring.factories

到這就完成了加載一個Spring 不能掃描到的一個類,他可以是第三方的,也可以是自己寫的,只要是Spring Boot 默認(rèn)掃描路徑不能夠掃描到,都可以使用這種方式去加載?。?!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI