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里面写的服务的方法。
以及Controller。
GitHub 地址如下 :https://github.com/KingestCode/mybatisspringbootstarter
大家可以去down下来看下 。有不足的地方希望大家指出 很多注解的意思我没给大家解释 不会的自己百度下吧。