手写简单的启动器

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作为参数,所以在此先详细地了解下这两个类的作用,这对之后的绘图会…

拦截器(二)

只拦截controller的请求, 基于aop&#xff0c;横切。 Spring MVC的拦截器类似于Servlet开发中的过滤器Filter&#xff0c; 用于对处理器进行预处理和后处理。 将拦截器按一定的顺序联结成一条链&#xff0c; 这条链称为拦截器链&#xff08;InterceptorChain&#xff09;。 在访…

nodejsmongoangularjs

http://www.ibm.com/developerworks/cn/web/wa-nodejs-polling-app/转载于:https://www.cnblogs.com/xixifusigao/p/4037928.html

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

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

spring mvc全局异常处理,注解实现

ssm框架中的异常处理&#xff0c;可以是dao, service, controller 一直抛出异常&#xff0c;抛出就完事了。最终由全局异常类捕获&#xff0c;进行日志记录&#xff0c;页面跳转。… 核心注解 // 方法级别 ExceptionHandler // 全局异常类上 ControllerAdvice // ControllerA…

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

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

sql server使用杂记

SqlServer导出数据库 navcat for sql server中打开连接&#xff0c;打开数据库&#xff0c;右键--数据传输&#xff0c;常规选项卡--模式选择dbo&#xff0c;目标选择连接&#xff08;选择你新建的库&#xff09;或者文件&#xff08;导出你要的sql文件位置&#xff09;&#x…

图解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…

hdu4011(水贪心)

点击打开链接hdu4011 水贪心&#xff1a; 注意I64d&#xff01; #include <stdio.h> #include <string.h> #include <iostream> #include <math.h> #include <algorithm> #include <vector> #include <map> #include <queue> …

测试===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 新增,修改

simple curd1. mybatis-plus2. 以用户表为例&#xff0c;德莫1. mybatis-plus mybatis的升级版&#xff0c;curd的奇淫技巧。 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、…