实现一个springboot-starter

自己实现一个springboot-redis-starter

1.springboot的优势

  • 创建spring项目简单
  • web项目自带tomcat
  • starter简化构建依赖配置
  • 自动配置(就是设置了默认值)
  • 零xml配置

2.starter的作用

  • 引入jar包
  • 完成bean的配置(通过配置文件完成自动装配)

使各个中间件,组件,数据库连接直接基于配置文件解耦。如在springboot中
引用druid-spring-boot-starter starter包,在完成配置就可以直接使用DataSource。
引入spring-boot-starter-data-redis starter包,在完成redis的配置便可以直接使用redisClient操作redis。

3.几个重要的注解

  • @ConfigurationProperties : 使该类可以读取配置文件中的属性。
  • @EnableConfigurationProperties注解的作用是:使使用 @ConfigurationProperties 注解的类生效。

  • @Conditional: 标注该bean是否会加入容器中。
    • @ConditionalOnBean:当容器中有指定的Bean的条件下
    • @ConditionalOnClass:当类路径下有指定的类的条件下
    • @ConditionalOnExpression:基于SpEL表达式作为判断条件
    • @ConditionalOnJava:基于JVM版本作为判断条件
    • @ConditionalOnJndi:在JNDI存在的条件下查找指定的位置
    • @ConditionalOnMissingBean:当容器中没有指定Bean的情况下
    • @ConditionalOnMissingClass:当类路径下没有指定的类的条件下
    • @ConditionalOnNotWebApplication:当前项目不是Web项目的条件下
    • @ConditionalOnProperty:指定的属性是否有指定的值
    • @ConditionalOnResource:类路径下是否有指定的资源
    • @ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者在有多个Bean的情况下,用来指定首选的Bean
    • @ConditionalOnWebApplication:当前项目是Web项目的条件下

4.自己实现一个自动装配的redis-starter

  • 新建一个maven starter项目
    <groupId>com.chenxin</groupId>
    <artifactId>spring-cx-redis-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.0.1</version>
        </dependency>
    </dependencies>
  • 新建一个properties配置类
//配置文件中的前缀
@ConfigurationProperties(prefix = "cx.redis")
public class RedisProperties {

    private String host = "localhost";

    private String password;

    private Integer port = 6379;
    //get/set方法省略
}
  • 新建一个redis客户端类,用于引用客户端调用
public class RedisClient{
    @Autowired
    private Jedis jedis;

    public String get(String key){
        String s = jedis.get(key);
        return s;
    }

    public String set(String key,String value){
        String setv = jedis.set(key, value);
        return value;
    }
}
  • 新建一个自动装配类(重点)
    @Configuration
    //使该配置文件生效
    @EnableConfigurationProperties(RedisProperties.class)
    //必须出现该配置cx.redis.host才会加载该类
    @ConditionalOnProperty(prefix = "cx.redis",name = "host")
    public class RedisAutoConfiguration {
    @Autowired
    private RedisProperties redisProperties;
    
    //容器中不存在jedis类才会加载该类
    @Bean
    @ConditionalOnMissingBean(Jedis.class)
    public Jedis jedis(){
        Jedis jedis = new Jedis(redisProperties.getHost(),redisProperties.getPort());
        if(redisProperties.getPassword()!=null){
            jedis.auth(redisProperties.getPassword());
        }
        return jedis;
    }
    @Bean
    @ConditionalOnMissingBean(RedisClient.class)
    public RedisClient redisClient(){
        return new RedisClient();
    }
}
  • 新建一个spring.factories(找到自动装配类)

直接在该路径下创建该文件resources/META-INF/spring.factories

EnableAutoConfiguration指向新建的自动装配类,springboot就会加载该类,并且完成类的创建

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.cx.autoconfigure.RedisAutoConfiguration
  • starter打包

mvn install 在本地打个jar包

  • springboot项目调用

    • 创建springboot maven项目(引入该starter)
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.1.6.RELEASE</version>
              <relativePath/> <!-- lookup parent from repository -->
          </parent>
          <groupId>com.cx</groupId>
          <artifactId>demo</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <name>demo</name>
      
          <properties>
              <java.version>1.8</java.version>
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
      
              <dependency>
                  <groupId>com.chenxin</groupId>
                  <artifactId>spring-cx-redis-starter</artifactId>
                  <version>1.0-SNAPSHOT</version>
              </dependency>
          </dependencies>
    
    • 完成配置

      cx.redis.host=xxx.xx.2.248
      cx.redis.port=6379
      
    • controller类测试

      @SpringBootApplication
      @RestController
      public class DemoApplication {
      public static void main(String[] args) {
          SpringApplication.run(DemoApplication.class, args);
      }
      @Autowired
      private RedisClient redisClient;
      
      @GetMapping("set")
      public String set(String key,String value){
          redisClient.set(key,value);
          return value;
      }
      
      @GetMapping("get")
      public String get(String key){
          String value = redisClient.get(key);
          return value;
      }
      }
      
    • 调用测试

    http://localhost:8080/set?key=name&value=leecx

    leecx

    http://localhost:8080/get?key=name

    leecx

谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值