Springboot手写starter

一、starter 工程的命名
starter 是一个开箱即用的组件,减少不必要的重复代码,重复配置。
Spring 官方定义的 starter 通常命名遵循的格式为 spring-boot-starter-{name},例如 spring-boot-starter-web。非官方 starter 命名应遵循 {name}-spring-boot-starter 的格式,例如,dubbo-spring-boot-starter。
二、需求
写一个序列化的插件,并且可以自由的选择 fastjson 还是 gson,如果没选的情况下默认选择 fastjson。
三、具体步骤

  1. 创建一个springboot工程,json-spring-boot-starter
    在这里插入图片描述
  2. 引入相关依赖
<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		
		<dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-autoconfigure</artifactId>
      </dependency>
      
      <!-- 这个是用来提示用的-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-configuration-processor</artifactId>
          <optional>true</optional>
      </dependency>
      
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.56</version>
      </dependency>
      
      <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
      </dependency>
  1. 定义一个顶级接口
public interface IJsonFormat {
	
	/**
	 * 将json转为指定对象
	 * @param json
	 * @param clazz
	 * @return T 目标类型
	 */
	<T> T json4Object(String json, Class<T> clazz); 
	
	/**
	 * 将对象转json字符串
	 * @param t
	 * @return String
	 */
	String object4json(Object obj);
}
  1. 创建两个具体的实现类
    (1)fastJson的实现类
public class FastJsonFormatImpl implements IJsonFormat {

	@Override
	public <T> T json4Object(String json, Class<T> clazz) {
		return JSON.parseObject(json, clazz);
	}

	@Override
	public String object4json(Object obj) {
		return JSON.toJSONString(obj);
	}
}

(2)Gson的实现类

public class GjsonFormatImpl implements IJsonFormat {
	private Gson gson = new Gson();

	@Override
	public <T> T json4Object(String json, Class<T> clazz) {
		return gson.fromJson(json, clazz);
	}

	@Override
	public String object4json(Object obj) {
		return gson.toJson(obj);
	}
}
  1. 创建properties配置类,用来读取用户的选择,用户可以在yml文件或者propertires文件中来定义自己的选择。配置方式:
    properties文件:json.format.type=0或1。
    yml文件:json:
    format:
    type: 1或0
@ConfigurationProperties(prefix = JsonProperties.JSON_PREFIX)
public class JsonProperties {
	
	public static final String JSON_PREFIX = "json.format";
	
	private String type;

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
}
  1. 创建模版类,向redisTemplate等一样,
public class JsonFormatTemplate {
	
	private IJsonFormat jsonFormat;
	
	public JsonFormatTemplate(IJsonFormat jsonFormat) {
		this.jsonFormat = jsonFormat;
	}

	public <T> T json4Object(String json, Class<T> clazz) {
		return jsonFormat.json4Object(json, clazz);
	}

	public String object4json(Object obj) {
		return jsonFormat.object4json(obj);
	}
}
  1. 核心配置类
@Configuration
@EnableConfigurationProperties(value = JsonProperties.class)
public class JsonConfig {
	
	@Autowired
	private JsonProperties jsonProperties;

	@ConditionalOnClass(com.alibaba.fastjson.JSON.class)
	@Bean
	@Primary
	public IJsonFormat fastJsonFormat() {
		return new FastJsonFormatImpl();
	}

	@ConditionalOnClass(com.google.gson.Gson.class)
	@Bean
	public IJsonFormat gsonFormat() {
		return new GjsonFormatImpl();
	}

	@Bean("jsonFormatTemplate")
	public JsonFormatTemplate getTemplate(IJsonFormat jsonFormat) {
		System.err.println(jsonProperties.getType());
		IJsonFormat format;
		if ("0".equals(jsonProperties.getType())) {
			format = new FastJsonFormatImpl();
		} else if ("1".equals(jsonProperties.getType())) {
			format = new GjsonFormatImpl();
		} else {
			format = jsonFormat;
		}
		return new JsonFormatTemplate(format);
	}
}
  1. 创建spring.factories
    在resource下面创建文件夹META-INF,并创建文件spring.factories
    如图:
    在这里插入图片描述
    输入:
# Auto Configrution
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.json.inter.config.JsonConfig

如此就完成了。
三:测试自定义starter

  1. 在setting.xml中配置好maven本地仓库后,直接右键json-spring-boot-starter项目install后就可以引入依赖使用了;在这里插入图片描述
  2. 引入依赖:
<dependency>
			<groupId>json-spring-boot-starter</groupId>
			<artifactId>json-starter</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值