自定义 starter|学习笔记

简介: 快速学习自定义 starter

开发者学堂课程【SpringBoot快速掌握 - 核心技术自定义 starter】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/612/detail/9283


自定义 starter

Spring Boot最强大的一个特点,将所有场景都抽取成了自定义 starters 场景启动器。通过引入 Spring Boot提供的场景启动器,就能使用到相应的场景功能,比如aop 功能,jpa 功能等等,并且引入了这些场景启动器之后,这些功能也自动配置,用户只需要在配置文件当中进行少量的数据配置,即使是这样 Spring Boot也不能囊括开发中所有的场景,往往需要自定义 starters,简化对 Spring Boot的使用。当写好某些场景的 starters 之后,别的开发人员可以直接引用 starters,就不需要做过多的配置。

 

一、 自定义 starter

starter :1、这个场景需要使用到的依赖是什么?2、如何编写自动配置

WebMvcAutoConfiguration为例

@Configuration  //指定这个类是一个配置类@ConditionalonXXX  //在指定条件成立的情况下自动配置类生效@AutoConfigureAfter //指定自动配置类的顺序@Bean //给容器中添加组件@ConfigurationPropertie // 结合相关xxxProperties类来绑定相关的配置@EnableConfigurationProperties  //让xxxProperties生效加入到容器中

自动配置类要能加载将需要启动就加载的自动配置类,配置在META-INF/spring.factoriesorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\org.springframework.boot.autoconfigure.aop.AopAutoconfiguration,\

自动配置类就能生效

•启动器(starter)

启动器模块是一个空 JAR 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库

image.png

先编写一个 xxxx-starter 启动器,自动配置再来写 xxxx-starter-autoconfigurer模块,启动器引入,依赖配置,然后别人要使用就来依赖这个启动器,自动引入自动配置。

3、模式:启动器只用来做依赖导入;专门来写一个自动配置模块;启动器依赖自动配置;别人只需要引入启动器(starter)mybatis-spring-boot-starter;自定义启动器名-spring-boot-starter

 

创建一个新的项目

一个是自动配置的添加一些 Modules,创建一个 new Module使用 Spring Initializr,先创 Maven 工程,Groupldcom.atguigu.starter

Artifactld  atguigu-spring-boot-starter

Version  1.0-SNAPSHOT 点击 Next,再创建一个 Spring Initializr初始化器。

Empty Project这个空工程,创建一个启动器,这个启动器只用来导入、依赖。初始化向导,选择 Spring Boot版本为1.5.10

<!--启动器-->

<dependencies>

<!--引入自动配置模块-->

<dependency>

<groupId>com.atguigu.starter</groupId>

<artifactId>atguigu-spring-boot-starter-autoconfigurer</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>

</dependencies>

</project>

<!--引入spring-boot-starter;所有starter的基本配置-->

<dependency>

<groupId>org. springframework . boot</ groupId>

<artifactId>spring- boot- starter</ artifactId>

</dependency>

</dependencies>

HelloService

package com. atguigu.starter;

public class HelloService {

HelloProperties  helloProperties;

public String sayHellAtguigu(String name){

return  HelloProperties.getPrefix()+”-“+ name + HelloProperties.getSuffix();

}

}

HelloProperties

package com. atguigu. starter ;

import org. springframework . boot . context . properties . Configurat ionProperties;

@ConfigurationProperties(prefix = "atguigu.hello")

public class HelloProperties {

private String prefix;

private String suffix;

public String getPrefix() {

return prefix;

}

public void setPrefix(String prefix) {

this.prefix = prefix;

}

public String getSuffix() {

return suffix;

}

public void setSuffix(String suffix) {

this. suffix = suffix;

}

}

 

HelloServiceAutoConfiguration

public class HelloService {

HelloProperties helloProperties ;

public String sayHellAtguigu(String name){

return helloProperties. getPrefix()+"-" +name +helloProperties . getSuffix();

}

@Configuration

@ConditionalOnWebApplication //web应用才生效

@EnableConfigurat. ionProperties (HelloProperties .class)

public class HelloServiceAutoConfiguration {

@Autowired

HelloProperties helloProperties;

@Bean

public HelloService helloService(){

HelloService service = new

HelloService();

service. setHelloProperties (helloProperties);

return service;

}

}

先安装autoconfigurer,install,装到仓库里,自动配置包装到仓库里,启动器也撞到仓库里。

检测是否引用好了,创建一个新项目,测试这个启动器是否能工作。

package com. atguigu. springboot . controller;

import com. atguigu. starter . HelloService;

import org . springframework . beans . factory . annotat ion . Autowired ;

import org . springframework . web. bind. annotation . GetMapping;

import org. springframework . web . bind . annotat ion . RestController ;

@RestController

public class HelloController {

@Autowired

HelloService helloService ;

@GetMapping("/hello")

public String hello(){

return helloService. sayHel 1Atguigu( name: "haha");

}

}

atguigu. hello. prefix=ATGUIGU

atguigu . hello. suffix=HELLO WORLD

结果:引入成功,正确启动。

浏览器中访问:localhost:8080/hello

显示结果:

image.png

•启动器(starter)

-启动器模块是一个空 JAR 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库命名规约:•推荐使用以下命名规约;

•官方命名空间-前缀:"spring-boot-starter-"-模式:spring-boot-starter-模块名-举例:spring-boot-starter-weby spring-boot-starter-actuator、spring-boot-starter-jdbc•自定义命名空间-后缀:"-spring-boot-starter"-模式:模块-spring-boot-starter-举例:mybatis-spring-boot-starter

 

相关文章
|
7月前
|
安全 Java 开发者
深入理解Spring Boot配置绑定及其实战应用
【4月更文挑战第10天】本文详细探讨了Spring Boot中配置绑定的核心概念,并结合实战示例,展示了如何在项目中有效地使用这些技术来管理和绑定配置属性。
80 1
|
6月前
|
消息中间件 Java Maven
深入理解Spring Boot Starter:概念、特点、场景、原理及自定义starter
深入理解Spring Boot Starter:概念、特点、场景、原理及自定义starter
|
5月前
|
Java Maven 开发者
Spring Boot中的自定义Starter开发
Spring Boot中的自定义Starter开发
|
6月前
|
Java Maven
6.自定义starter
6.自定义starter
34 0
|
开发框架 SpringCloudAlibaba Java
Spring Boot自动配置原理详解和自定义封装实现starter
我们一直在强调`Spring Boot`能成为当下主流首选开发框架的主要原因在于其核心思想:**约定大于配置,自动配置,条件装配**。基于这些特性使得`Spring Boot`集成其他框架非常简单快捷
244 1
 Spring Boot自动配置原理详解和自定义封装实现starter
|
NoSQL Java Redis
自定义Sprin-Boot-Starter
自定义Sprin-Boot-Starter
45 0
|
XML Java 数据格式
如何实现一个自定义的starter
SpringFactoriesLoader加载器加载指定ClassLoader下面的所有的META-INF/spring.factories文件,并将文件解析内容存在Map&lt;string,list&gt;中。然后通过loadFactoryNames传递过来的class的名称从map中获取该类的配置列表。通过Set集合进行去重操作。执行过滤组件操作,而这些操作都是在AutoConfigurationImportFilter接口下的组件实现的,也即FilterSpringBootCondition实现抽象类的。下面有OnBeanCondition、OnClassCondition、OnWebApplic
36827 5
如何实现一个自定义的starter
|
Java Maven
自定义Starter
启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库;
自定义Starter
|
Java 容器
实战|如何自定义SpringBoot Starter?
SpringBoot 项目就是由一个一个 Starter 组成的,一个 Starter 代表该项目的 SpringBoot 起步依赖,除了官方已有的 Starter,如果你需要将自己的项目支持 SpringBoot,那么就需要把它制作成一个 Starter。
225 0
实战|如何自定义SpringBoot Starter?
|
NoSQL Java Redis
自定义一个starter
自定义一个打印方法执行时间的切面starter
1313 0
自定义一个starter