5.springboot自定义starter

  • starter是SpringBoot的核心组成部分,在starter中springboot为我们提供了很多的默认封装,同时提供了可扩展性的节点。我们在使用的时候,可以使用默认的封装,或者在application.properties配置文件中自己定义,这样就能实现灵活的运用,接下来我们就来自定义starter并且通过spring-boot-autoconfigure完成自动化配置。
  • 先熟悉springboot提供的一些列条件注解:
@ConditionalOnBean:当SpringIoc容器内存在指定Bean的条件 
@ConditionalOnClass:当SpringIoc容器内存在指定Class的条件 
@ConditionalOnExpression:基于SpEL表达式作为判断条件 
@ConditionalOnJava:基于JVM版本作为判断条件 
@ConditionalOnJndi:在JNDI存在时查找指定的位置 
@ConditionalOnMissingBean:当SpringIoc容器内不存在指定Bean的条件 
@ConditionalOnMissingClass:当SpringIoc容器内不存在指定Class的条件 
@ConditionalOnNotWebApplication:当前项目不是Web项目的条件 
@ConditionalOnProperty:指定的属性是否有指定的值 
@ConditionalOnResource:类路径是否有指定的值 
@ConditionalOnSingleCandidate:当指定Bean在SpringIoc容器内只有一个,或者虽然有多个但是指定首选的Bean 
@ConditionalOnWebApplication:当前项目是Web项目的条件

一、创建maven项目导入自动配置依赖

  • 这里只是添加了spring-boot-autoconfigure,可以根据自己封装的业务内容进行添加


    4.0.0

    com.qiu
    hello
    1.0-SNAPSHOT

    
        UTF-8
    
    
        
            org.springframework.boot
            spring-boot-autoconfigure
            2.0.0.RELEASE
        
    

二、自定义业务所需要的默认操作

  • @ConfigurationProperties注解内我们使用到了属性preffix,该属性配置了读取参数的前缀,根据上面的实体属性对应配置文件内的配置则是hello.message、hello.show,当然我们提供了默认值,配置文件内不进行配置时则是使用默认值。
//配置默认的参数实体类
@ConfigurationProperties(prefix = "hello")
public class HelloProperties {
    //消息内容
    private String message = "hello world";
    //是否显示消息内容
    private boolean show = true;

    public String getMessage() {
        return message;
    }

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

    public boolean isShow() {
        return show;
    }

    public void setShow(boolean show) {
        this.show = show;
    }
}

三、编写自定义的业务

//自定义的业务类
public class HelloService {
    //消息内容
    private String message;
    //是否显示消息内容
    private boolean show ;

    public String sayHello()
    {
        return show ? "Hello," + message : "Hidden";
    }


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

    public void setShow(boolean show) {
        this.show = show;
    }
}

四、自定义starter自动化配置

@Configuration//开启配置
@EnableConfigurationProperties(HelloProperties.class)//开启使用映射实体对象
@ConditionalOnClass(HelloService.class)//存在HelloService时初始化该配置类
public class HelloAutoConfiguration {
    //application.properties配置文件映射前缀实体对象
    @Autowired
    private HelloProperties helloProperties;

    /**
     * 根据条件判断不存在HelloService时初始化新bean到SpringIoc
     * @return
     */
    @Bean//创建HelloService实体bean
    @ConditionalOnMissingBean(HelloService.class)//缺失HelloService实体bean时,初始化HelloService并添加到SpringIoc
    public HelloService helloService()
    {
        System.out.println(">>>The HelloService Not Found,Execute Create New Bean.");
        HelloService helloService = new HelloService();
        helloService.setMessage(helloProperties.getMessage());//设置消息内容
        helloService.setShow(helloProperties.isShow());//设置是否显示
        return helloService;
    }
}

五、自定义spring.factories

  • 在src/main/resource目录下创建META-INF目录,并在目录内添加文件spring.factories

//配置自定义Starter的自动化配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.qiu.hello.HelloAutoConfiguration

六、另一个项目中进行测试

  • 先进行打包:步骤:工具右侧 -> Maven Projects -> Lifecycle -> install,然后在另一个项目中引入

        
        
            com.qiu
            hello
            1.0-SNAPSHOT
        
  • 开启项目


    打印出自建starter中的数据
  • 自测:
@RestController
public class HelloController
{
    //注入自定义starter内逻辑
    @Autowired
    HelloService helloService;

    /**
     * 测试访问地址/hello
     * @return 格式化字符串
     */
    @RequestMapping(value = "/hello")
    public String sayHello()
    {
        return helloService.sayHello();
    }
}

返回:Hello,hello world

  • 在applicationh.properties配置文件中配置后再进行测试

参考:https://blog.csdn.net/weixin_42033269/article/details/80026078?utm_source=blogxgwz0

你可能感兴趣的:(5.springboot自定义starter)