案例:需求
自定义redis-starter。要求当导入redis坐标时,SpringBoot自动创建Jedis的Bean。
实现步骤
① 创建 redis-spring-boot-autoconfigure 模块
② 创建 redis-spring-boot-starter 模块,依赖 redis-spring-boot-autoconfigure的模块
<dependency> <groupId>com.example</groupId> <artifactId>redis-spring-boot-autoconfigure</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
③ 在 redis-spring-boot-autoconfigure 模块中初始化 Jedis 的Bean。并定义META-INF/spring.factories 文件
在pom文件里加入jedis的依赖
<!--导入jedis的包--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency>
创建Redis特性类:RedisProperties,完成以下代码
package com.example.redis.config; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "test.redis") public class RedisProperties { private String host = "localhost"; //默认IP private int port = 6379; //默认端口 public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } }
创建Redis自动加载配置类,完成以下代码
package com.example.redis.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import redis.clients.jedis.Jedis; @Configuration @EnableConfigurationProperties(RedisProperties.class) @ConditionalOnClass(Jedis.class) //保证有Jedis的时候再去加载bean public class RedisAutoConfiguration { /** * 提供Jedis的bean * @param redisProperties * @return */ @Bean @ConditionalOnMissingBean(name="jedis") //如果调用端自己定义jedis Bean 则不调用 public Jedis jedis(RedisProperties redisProperties){ return new Jedis(redisProperties.getHost(),redisProperties.getPort()); } }
④ 在测试模块中引入自定义的 redis-starter 依赖,测试获取Jedis 的Bean,操作 redis。
在pom文件中引入自定义的starter
<dependency> <groupId>com.example</groupId> <artifactId>redis-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
获取Jedis 的Bean
package com.example.springboot.enble; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import redis.clients.jedis.Jedis; @SpringBootApplication public class SpringbootEnble2Application { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(SpringbootEnble2Application.class, args); Jedis jedis = context.getBean(Jedis.class); System.out.println(jedis); jedis.set("name","你好~~~"); String name = jedis.get("name"); System.out.println(name); } }
文章评论