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
    评论
当然可以!以下是一个简单的示例,展示了如何手写一个Spring Boot Starter: 首先,创建一个 Maven 项目,并添加以下依赖项: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.5.4</version> </dependency> </dependencies> ``` 接下来,创建一个自定义的自动配置类,用于配置你的 Starter: ```java @Configuration @EnableConfigurationProperties(MyStarterProperties.class) public class MyStarterAutoConfiguration { private final MyStarterProperties properties; public MyStarterAutoConfiguration(MyStarterProperties properties) { this.properties = properties; } // 在此处定义你的自动配置逻辑 @Bean public MyStarterService myStarterService() { return new MyStarterService(properties); } } ``` 然后,创建一个属性类,用于将外部配置绑定到属性上: ```java @ConfigurationProperties("my.starter") public class MyStarterProperties { private String message; // 提供 getter 和 setter } ``` 最后,创建一个自定义的服务类,该服务类将在你的 Starter 中使用: ```java public class MyStarterService { private final MyStarterProperties properties; public MyStarterService(MyStarterProperties properties) { this.properties = properties; } public void showMessage() { System.out.println(properties.getMessage()); } } ``` 现在,你的 Spring Boot Starter 已经准备就绪了!你可以将其打包并使用在其他 Spring Boot 项目中。在其他项目的 `pom.xml` 文件中,添加你的 Starter 依赖: ```xml <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>my-starter</artifactId> <version>1.0.0</version> </dependency> </dependencies> ``` 然后,在你的应用程序中使用 `MyStarterService`: ```java @SpringBootApplication public class MyApplication implements CommandLineRunner { private final MyStarterService myStarterService; public MyApplication(MyStarterService myStarterService) { this.myStarterService = myStarterService; } public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } @Override public void run(String... args) throws Exception { myStarterService.showMessage(); } } ``` 这样,你就成功地创建了一个简单的 Spring Boot Starter!当其他项目引入你的 Starter 并运行时,将会输出预定义的消息。 当然,这只是一个简单的示例,真实的 Starter 可能包含更多的配置和功能。你可以根据自己的需求进行扩展和定制。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值