如何 自定义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. 總結(jié)
1. 前言
在看這篇文章之前呢,我希望大伙應(yīng)該了解SpringBoot的自動裝配的原理,如果這個不清楚的話,這篇文章或許看起來就有些困難了。
這個SpringBoot的自動裝配原理其實很簡單,沒有什么特別難理解的地方。來回那么回事兒,想想也知道。比如:之前在用spring 的時候,集成一個別的技術(shù),需要配置這個,配置那個的。比如你在這個項目A中要使用Mybatis,所以你需要把其整合到Spring中來,需要“這么”配置,那么在這個項目B中也要集成Mybatis,你的配置是否與項目A中的配置類似(或許只是參數(shù)不同)?是不是這些個配置出現(xiàn)重復(fù)了?那么SpringBoot的自動裝配原理就來了,那么既然基本的配置都這么配置 那干脆我直接給你提供這個配置得了,你直接給我配置里面需要的參數(shù)即可了(在application.yml 中配置的就是參數(shù)了)。那么在SpringBoot啟動的時候,就會去掃描這些個自動配置的類,如果其符合要求,就給他加到spring的容器中使其生效。然后就用起來非常的爽,就給幾個參數(shù),就可以整合一個技術(shù)。
需要的可以看一下我的SpringBoot自動裝配原理的文章: 點擊跳轉(zhuǎn)
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,或許也就是看著名字像,那他的具體作用是什么呢?還是沒有體現(xiàn)出來。
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實現(xiàn)的廠家--><property name="persistenceProvider"><bean class="org.hibernate.jpa.HibernatePersistenceProvider"/></property><!--jpa供應(yīng)商的適配器--><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)建數(shù)據(jù)庫表--><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ā)現(xiàn)沒有,SpringBoot 默認的情況下 我們根本就沒有寫配置文件。
2.2 說明的問題
從2.1 可以看出, SpringBoot 中Starter的作用:
- 依賴jar包
- 提供默認的配置
從2.1 的例子就能看出來, Spring 中整合jpa 是不是寫了一堆坐標?而在SpringBoot 中就依賴了一個jpa starter 。那么結(jié)果顯然是starter 中已經(jīng)依賴了jpa需要的坐標,我們只需要依賴jpa的starter ,那些特別難記的坐標,就自動引入了。
還有就是,我們在依賴的starter 之后,并沒有寫配置文件,那么顯然在starter中也是提供了默認的配置類,我們只需要配置參數(shù)即可。(需要說明的是:jpa的配置類并不是jpa的starter提供的。其他的非spring的技術(shù)在寫自己的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中的配置
定義默認配置類(其中幾個注解的作用可以看我上篇文章,或者查閱相關(guān)資料):
定義spring.factories文件(至于為什么,請看我上篇文章,或者查閱相關(guān)資料)
additional-spring-configuration-metadata.json文件的編寫,這個文件可寫可不寫,如果寫了的話,在我們在填寫application.yml 的時候會有相應(yīng)的提示,至于該文件的書寫規(guī)范請:點擊跳轉(zhuǎn)
3.2.4 打包
使用maven 打包即可,如果你使用gradle 也是一樣的。
3.3 自定義starter 的使用
3.3.1 隨便找個其他的項目
3.3.2 引入我們自定義的starter
3.3.3 application.yml 中配置
3.3.4 使用-好好滴
4. 總結(jié)
沒有什么好說的。
總結(jié)
以上是生活随笔為你收集整理的如何 自定义starter?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片base64格式解析
- 下一篇: 环科跨考数一英一408经验帖