SpringBoot自定义Starter

SpringBoot自定义Starter

再面试的时候被问到会不会自定义Starter 尴尬了。。所以回来百度了下 也就自己写了下

此Starter 主要功能是自动引入服务 并且 自动引入Controller 话不多说。

首先创建一个maven 项目 pom 如下所示 :
主要 使用的 是 autoconfigure 依赖包




  4.0.0

  
    org.springframework.boot
    spring-boot-starter-parent
    2.0.3.RELEASE
     
  

  com.zyh
  mybatis-spring-boot-starter
  0.0.1
  jar





  mybatis-spring-boot-starter
  
  http://www.example.com

  
    UTF-8
    1.7
    1.7
  

  

    
      org.springframework.boot
      spring-boot-autoconfigure
    
    
      org.springframework.boot
      spring-boot-starter-web
    
  




接下来 创建 配置类

package com.test;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "spring.girlfriend")
public class GirlFriendProperties {

    private  String message  ="hello";

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

接下来创建一个 接口 重要负责输出我们配置类里面的属性值

package com.test;

public interface GirlFriendServiceInterface {
    void say();
}

接下来创建接口实现类

package com.test;

import org.springframework.beans.factory.annotation.Autowired;

public class GirlFriendServiceImpl implements GirlFriendServiceInterface{
    @Autowired
    private GirlFriendProperties girlFriendProperties;
    @Override
    public void say() {
        System.out.println("调用到了service"+girlFriendProperties.getMessage());
    }
}

接下来创建配配置类

@Configuration
@ConditionalOnClass(GirlFriendServiceInterface.class)
@EnableConfigurationProperties(GirlFriendProperties.class)
@Import({TestController.class})
public class GirlFriendConfigration {
    @Bean
    @ConditionalOnMissingBean
    public GirlFriendServiceInterface girlFriendServiceInterface() {
        return new GirlFriendServiceImpl();
    }

}

Controller 如下所示 :

package com.test.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @RequestMapping("test")
    public String test() {
        return "hello";
    }
}

接下来也是最重要的配置了 是如何让其他项目能够自动引入我们的Starter呢

有两种方式

第一种方式 :

在 resources 目录下面 创建 META-INF 文件夹 并在文件夹下面创建 文件 spring.factories 加入如下代码:

# 指定刚刚创建的 GirlFriendAutoConfiguration 的全路径名
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.test.GirlFriendConfigration

第二种方式 :

创建 EnableXXX 注解 推荐大家采用这种方式 因为很灵活 代码如下:

package com.test;

import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

@Import(GirlFriendConfigration.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EnableSelfConfig {
}

上面的方法采取一个去使用即可 mvn clean install 会生成 jar包

接下来 我们创建一个测试的项目 进行测试就可以了 记得讲我们自己写的Starter 依赖进来

如果采用了 第一种配置方式 测试项目的启动类如下:

@SpringBootApplication
public class TestApplication implements CommandLineRunner {

public static void main(String[] args) {

    SpringApplication.run(TestApplication.class,args);
}
@Autowired
private    GirlFriendServiceInterface girlFriendServiceInterface;


public void run(String... args) throws Exception {
    girlFriendServiceInterface.say();
}

}

如果采用了 第二种配置方式 就可以使用 EnableXXX 的方式 进行配置了

@EnableSelfConfig
@SpringBootApplication
public class TestApplication implements CommandLineRunner {

public static void main(String[] args) {

    SpringApplication.run(TestApplication.class,args);
}
@Autowired
private    GirlFriendServiceInterface girlFriendServiceInterface;


public void run(String... args) throws Exception {
    girlFriendServiceInterface.say();
}

}

接下来 给大家 看下结果的截图吧

项目启动后会自动调用我们Starter里面写的服务的方法。

SpringBoot自定义Starter_第1张图片
屏幕快照 2019-04-27 下午10.55.05.png

以及Controller。


SpringBoot自定义Starter_第2张图片
屏幕快照 2019-04-27 下午10.55.32.png

GitHub 地址如下 :https://github.com/KingestCode/mybatisspringbootstarter
大家可以去down下来看下 。有不足的地方希望大家指出 很多注解的意思我没给大家解释 不会的自己百度下吧。

你可能感兴趣的:(SpringBoot自定义Starter)