手写简单的启动器

starter

    • 1. target
    • 2. 手写启动器~
      • 2.1 自动装配,自定义属性
      • 2.2 启动器,引用自动装配模块
    • 3. 在自己的项目引用上面的starter

1. target

   1. 启动器只用来做依赖导入(导入配置模块)2. 专门来写一个自动配置模块3. 启动器依赖自动配置;别人只需要引入启动器(starter)xxx-spring-boot-starter; 自定义启动器名分析:
一个启动器需要两个模块,一个是自动装配模块,自动装配属性,定义好装配规则。
第二个是启动器引用自动配置模块。
将两个项目打包到maven仓库,或者私服仓库,
自己的其它项目引用启动器就行了,
在yaml或者properties中配置好启动器的属性就行了。

需要的注解

 @Configuration 指定这是一个配置类@ConditionalOnXXX 指定条件成立下,自动配置类生效@AutoConfigureAfter 指定自动配置的顺序@Bean 给容器中添加组件@ConfigurationProperites 结合xxxProperties 类绑定相关的配置@EnableConfigurationProperties // 让xxxProperties生效加入容器中自动配置类如何能加载将需要启动就加载的自动配置类,配置在META-INF/spring.properteis 中

2. 手写启动器~

2.1 自动装配,自定义属性

自动配置,pom,只留下下面的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/> </parent><!-- 自动配置模块... --><groupId>cn.bitqian</groupId><artifactId>bitqian-spring-boot-starter-autoconfigurer</artifactId><version>0.0.1-SNAPSHOT</version><name>bitqian-spring-boot-starter-autoconfigurer</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency></dependencies></project>

启动器的属性,boot中常见的xxxProperties类

package cn.bitqian.starter;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "bitqian.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;}
}

启动器功能方法

package cn.bitqian.starter;/*** @author echo lovely* @date 2020/11/8 11:39*/
public class HelloService {private HelloProperties helloProperties;public HelloProperties getHelloProperties() {return helloProperties;}public void setHelloProperties(HelloProperties helloProperties) {this.helloProperties = helloProperties;}/*** 启动器的方法,配置前后缀,实现sayHello* @param name parameter* @return string*/public String sayHello(String name) {return helloProperties.getPrefix() + name + helloProperties.getSuffix();}}

自动装配类

package cn.bitqian.starter;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;// 配置类
@Configuration
@ConditionalOnWebApplication // web应用才能生效
@EnableConfigurationProperties(HelloProperties.class) // 让属性文件生效
public class HelloServiceAutoConfiguration {@Autowiredprivate HelloProperties helloProperties;@Beanpublic HelloService helloService() {HelloService helloService = new HelloService();helloService.setHelloProperties(helloProperties);return helloService;}}

创建META-INF文件夹,配置自动装配类,在spring.factories里面

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.bitqian.starter.HelloServiceAutoConfiguration

双击安装到maven仓库

2.2 启动器,引用自动装配模块

启动器模块,依赖自动配置模块

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 启动器 --><groupId>cn.bitqian</groupId><artifactId>bitqian-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version><!-- bitqian springboot 启动器,依赖导入 --><dependencies><dependency><groupId>cn.bitqian</groupId><artifactId>bitqian-spring-boot-starter-autoconfigurer</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></project>

安装到maven仓库

3. 在自己的项目引用上面的starter

  1. 创建springboot项目,引入依赖
    在这里插入图片描述
  2. 编写controller
package cn.bitqian;import cn.bitqian.starter.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class DemoController {@AutowiredHelloService helloService;@RequestMapping("/hello")public String hello() {return "hello, " + helloService.sayHello(" rye ");}}
  1. 自动装配, 嘤嘤嘤
bitqian.hello.prefix=i like 
bitqian.hello.suffix=so much
  1. so- - -

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 颜色渲染(九) PorterDuff及Xfermode详解

Android 颜色渲染(九) PorterDuff及Xfermode详解之前已经讲过了除ComposeShader之外Shader的全部子类, 在讲ComposeShader(组合渲染)之前, 由于构造ComposeShader需要 PorterDuffXfermode或者PorterDuff.Mode作为参数,所以在此先详细地了解下这两个类的作用,这对之后的绘图会…

每次新建Android项目都报样式找不到的错误?

问题描述如图再网上找了下说改为<style name"AppBaseTheme" parent"android:Theme.Light">这样就行了的确改为这样就ok了但是如果每次都要这么改&#xff0c;不是很烦&#xff1f;有没有彻底解决这个问题的方法&#xff1f;谢谢 解决方案1新建的时候…

Qt多线程学习:创建多线程

【为什么要用多线程&#xff1f;】 传统的图形用户界面应用程序都仅仅有一个运行线程&#xff0c;而且一次仅仅运行一个操作。假设用户从用户界面中调用一个比較耗时的操作&#xff0c;当该操作正在运行时&#xff0c;用户界面一般会冻结而不再响应。这个问题能够用事件处理和多…

图解springmvc 执行流程

核心对象 DispatcherServlet 核心控制器负责请求&#xff0c;响应&#xff0c;数据的分发。HandlerMapping 处理器映射器&#xff0c;负责到controller中&#xff0c;找到对应的方法&#xff0c;返回给核心控制器。HandleAdapter 处理适配器&#xff0c;将handle找到的方法执行…

VMware下Windows Server 2012添加新磁盘

系统管理员在VM下新装了一台Windows Server 2012服务器&#xff0c;我在上面安装了SQL Server 2014 Standard版数据库&#xff0c;安装之初&#xff0c;只分配了一个C盘&#xff0c;我想在这台服务器上添加了三个磁盘&#xff08;虚拟磁盘&#xff09;&#xff0c;步骤如下截图…

mybatis Caused by: java.io.IOException: Could not find resource xxx.xml

翻译&#xff1a;找不到mybatis的映射配置文件。。。 配置文件名别写错了… <!-- 扫描mapper --> <mappers><!-- src/main/resources下 使用\ --><!-- <mapper resource"cn\bitqian\mapper\ordersMapper.xml"/> --><!-- src/mai…

mybatis新增返回主键值

mapper <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"cn.bitqian.dao.OrdersMa…

测试===JUnit单元测试

测试一&#xff0c;测试分类二&#xff0c;单元测试Junit&#xff0c;你以为的junit只是Test注解吗&#xff0c;shallow..优点&#xff1a;规范&#xff1a;断言&#xff1a;案例demo&#xff1a;junit test case测试类创建&#xff0c;执行测试&#xff0c;结果反馈junit test…

iOS IAP教程

1. 创建应用首先进入iTunes Connect然后按下 Manage Your Applications接下来按下Add New Applicationbutton创建应用2. 在应用中创建IAP创建应用之后&#xff0c;在Manage Your Applications中点应用的图示&#xff0c;进入应用就会看到上图画面点击Manage In App Purchases就…

mybatis-plus 使用乐观锁修改

title乐观锁与悲观锁解决方案code测试乐观锁与悲观锁 乐观锁&#xff1a;十分乐观&#xff0c;总是认为不会出现问题&#xff0c;无论干什么&#xff0c;都不会去上锁。如果出现了问题&#xff0c;就再次更新值测试。 悲观锁&#xff1a;十分悲观&#xff0c;认为总是出现问题…

EasyUI 在aspx页面显示高度不正常解决办法

<body class"easyui-layout"><form id"form1" runat"server"><table id"dg" class"easyui-datagrid"></table></form> </body> </html>这样写的时候&#xff0c;datagrid显示就不…

WPF中的动画——(四)缓动函数

缓动函数可以通过一系列公式模拟一些物理效果&#xff0c;如实地弹跳或其行为如同在弹簧上一样。它们一般应用在From/To/By动画上&#xff0c;可以使得其动画更加平滑。 var widthAnimation new DoubleAnimation() { From 0, To 320, Duration Tim…

mybatis-plus 查询,删除

title查询 单值&#xff0c;多个主键&#xff0c;条件分页查询物理删除&#xff0c;逻辑删除mybatis-plus 新增&#xff0c;修改查询 单值&#xff0c;多个主键&#xff0c;条件 Testvoid queryOne() {// 查询单个userUser user userMapper.selectById(1);System.out.println(…