日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何 自定义starter?

發(fā)布時間:2023/12/20 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何 自定义starter? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1. 前言
  • 2. 什么是starter?
    • 2.1 下面以SpringDataJpa舉例
    • 2.2 說明的問題
  • 3. 定義自己的 starter
    • 3.1 正常的swagger2的整合
      • 3.1.1 pom
      • 3.1.2 config
      • 3.1.3 使用
    • 3.2 自定義starter
      • 3.2.1 創(chuàng)建項目
      • 3.2.2 pom
      • 3.2.3 config
      • 3.2.4 打包
    • 3.3 自定義starter 的使用
      • 3.3.1 隨便找個其他的項目
      • 3.3.2 引入我們自定義的starter
      • 3.3.3 application.yml 中配置
      • 3.3.4 使用-好好滴
  • 4. 總結

1. 前言

在看這篇文章之前呢,我希望大伙應該了解SpringBoot的自動裝配的原理,如果這個不清楚的話,這篇文章或許看起來就有些困難了。

這個SpringBoot的自動裝配原理其實很簡單,沒有什么特別難理解的地方。來回那么回事兒,想想也知道。比如:之前在用spring 的時候,集成一個別的技術,需要配置這個,配置那個的。比如你在這個項目A中要使用Mybatis,所以你需要把其整合到Spring中來,需要“這么”配置,那么在這個項目B中也要集成Mybatis,你的配置是否與項目A中的配置類似(或許只是參數不同)?是不是這些個配置出現重復了?那么SpringBoot的自動裝配原理就來了,那么既然基本的配置都這么配置 那干脆我直接給你提供這個配置得了,你直接給我配置里面需要的參數即可了(在application.yml 中配置的就是參數了)。那么在SpringBoot啟動的時候,就會去掃描這些個自動配置的類,如果其符合要求,就給他加到spring的容器中使其生效。然后就用起來非常的爽,就給幾個參數,就可以整合一個技術。

需要的可以看一下我的SpringBoot自動裝配原理的文章: 點擊跳轉

2. 什么是starter?

那么話說回來,啥是starter 呢?比如我們SpringBoot 需要 web 的話 需要的坐標:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>

整合Mybatis 的話,需要的坐標:

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId> </dependency>

整合Jpa 的話,需要的坐標:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>

上面的就是starter,或許也就是看著名字像,那他的具體作用是什么呢?還是沒有體現出來。

2.1 下面以SpringDataJpa舉例

如果直接使用Spring 整合SpringDataJpa的話,需要如下坐標:

<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId> </dependency> <!-- hibernate beg --> <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version> </dependency> <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>${hibernate.version}</version> </dependency> <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.2.1.Final</version> </dependency> <!-- hibernate end --> ..................... ..................... .....................

然后在做spring Data Jpa 的配置:

<!--配置entityManagerFactory--> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource"/><!--配置要掃描的包(entity的包)--><property name="packagesToScan" value="com.lzy.pojo"/><!--配置jpa實現的廠家--><property name="persistenceProvider"><bean class="org.hibernate.jpa.HibernatePersistenceProvider"/></property><!--jpa供應商的適配器--><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><property name="database" value="MYSQL"/><property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/><!--配置是否 自動創(chuàng)建數據庫表--><property name="generateDdl" value="false"/><property name="showSql" value="true"/></bean></property><!-- 注入jpa原生的配置 --><property name="jpaProperties"><props><prop key="hibernate.hbm2ddl.auto">update</prop></props></property></bean><!--sping 整合jpa--> <jpa:repositoriesbase-package="com.lzy.dao"transaction-manager-ref="transactionManager"entity-manager-factory-ref="entityManagerFactory"> </jpa:repositories>

如果SpringBoot 的話引入坐標的話:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>

application.yml中配置:

spring:application:name: boot-researchjpa:database: mysqlshow-sql: truegenerate-ddl: falsehibernate:ddl-auto: updatenaming:physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyimplicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpldatabase-platform: org.hibernate.dialect.MySQLDialect

發(fā)現沒有,SpringBoot 默認的情況下 我們根本就沒有寫配置文件。

2.2 說明的問題

從2.1 可以看出, SpringBoot 中Starter的作用:

  • 依賴jar包
  • 提供默認的配置

從2.1 的例子就能看出來, Spring 中整合jpa 是不是寫了一堆坐標?而在SpringBoot 中就依賴了一個jpa starter 。那么結果顯然是starter 中已經依賴了jpa需要的坐標,我們只需要依賴jpa的starter ,那些特別難記的坐標,就自動引入了。

還有就是,我們在依賴的starter 之后,并沒有寫配置文件,那么顯然在starter中也是提供了默認的配置類,我們只需要配置參數即可。(需要說明的是:jpa的配置類并不是jpa的starter提供的。其他的非spring的技術在寫自己的starter的時候,是需要自己提供的,因為spring 肯定沒有提供。)

3. 定義自己的 starter

從上面的闡述我們知道了starter 是什么,下面我以自定義Swagger2的starter 為例來定義自己的starter。

3.1 正常的swagger2的整合

3.1.1 pom

<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger.version}</version> </dependency> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${swagger.version}</version> </dependency>

3.1.2 config

@Configuration @EnableSwagger2 public class SwaggerConfig {@Beanpublic Docket webApiConfig(){return new Docket(DocumentationType.SWAGGER_2).groupName("groupNamexxx").apiInfo(webApiInfo()).select().paths(PathSelectors.any()).build();}private ApiInfo webApiInfo(){return new ApiInfoBuilder().title("xxx").description("xxxx").version("1.0").contact(new Contact("Immort", "http://www.xxx.com", "xxxxx@qq.com")).build();} }

3.1.3 使用

直接打注解使用即可

3.2 自定義starter

3.2.1 創(chuàng)建項目

3.2.2 pom

3.2.3 config

定義porperties類用來存儲yml中的配置

定義默認配置類(其中幾個注解的作用可以看我上篇文章,或者查閱相關資料):

定義spring.factories文件(至于為什么,請看我上篇文章,或者查閱相關資料)


additional-spring-configuration-metadata.json文件的編寫,這個文件可寫可不寫,如果寫了的話,在我們在填寫application.yml 的時候會有相應的提示,至于該文件的書寫規(guī)范請:點擊跳轉

3.2.4 打包

使用maven 打包即可,如果你使用gradle 也是一樣的。

3.3 自定義starter 的使用

3.3.1 隨便找個其他的項目

3.3.2 引入我們自定義的starter

3.3.3 application.yml 中配置

3.3.4 使用-好好滴

4. 總結

沒有什么好說的。

總結

以上是生活随笔為你收集整理的如何 自定义starter?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。