SpringBoot 手写 Starter

1.介绍

SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。SpringBoot会自动通过classpath路径下的类发现需要的Bean,并注册进IOC容器。SpringBoot提供了针对日常企业应用研发各种场景的spring-boot-starter依赖模块。所有这些依赖模块都遵循着约定成俗的默认配置,并允许我们调整这些配置,即遵循“约定大于配置”的理念。

优点

一般认为,SpringBoot 微框架从两个主要层面影响 Spring 社区的开发者们:

  • 基于 Spring 框架的“约定优先于配置(COC)”理念以及最佳实践之路。

  • 提供了针对日常企业应用研发各种场景的 spring-boot-starter 自动配置依赖模块,如此多“开箱即用”的依赖模块,使得开发各种场景的 Spring 应用更加快速和高效。

​ SpringBoot 提供的这些“开箱即用”的依赖模块都约定以 spring-boot-starter- 作为命名的前缀,并且皆位于 org.springframework.boot 包或者命名空间下(虽然 SpringBoot 的官方参考文档中提到不建议大家使用 spring-boot-starter- 来命名自己写的类似的自动配置依赖模块,但实际上,配合不同的 groupId,这不应该是什么问题)。

2.starter自定义

springboot 官方建议springboot官方推出的starter 以spring-boot-starter-xxx的格式来命名,第三方开发者自定义的starter则以xxxx-spring-boot-starter的规则来命名,事实上,很多开发者在自定义starter的时候往往会忽略这个东西。

自定义一个登录拦截的启动器,authority-spring-boot-starter

开发步骤:

2.1新建工程

在这里插入图片描述

引入以下依赖:

        <!--自定义启动器  必须依赖的包-->
      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>

        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>

        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>


2.2创建登录拦截器

import org.springframework.web.servlet.HandlerInterceptor;

public class AuthorityInteceptor implements HandlerInterceptor {

    public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
        System.out.println("-------------------同志你被拦截了 -------------");
        return  true;
    }
}

2.3创建属性绑定文件

@ConfigurationProperties(prefix = "spring.auth")
@Data
public class AuthorityProperties {

    /**
     * 是否启用
     */
    boolean enabled;

    /**
     * 拦截的路径
     */
    String pathPatterns;

    /**
     * 不拦截的路径
     */
    String excludePathPatterns;


}

2.4注册拦截器

//@EnableConfigurationProperties(AuthorityProperties.class)
@Order( Ordered.HIGHEST_PRECEDENCE)
@Import(AuthorityProperties.class)
public class WebConfig implements WebMvcConfigurer {

   @Autowired
   private AuthorityProperties properties;

    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthorityInteceptor())
                .addPathPatterns(properties.getPathPatterns())
             .excludePathPatterns(properties.getExcludePathPatterns());
    }
   
}

2.5创建自动配置类AuthorityAutoConfigruation


@ConditionalOnProperty(
        prefix = "spring.auth",
        value = "enabled",
        havingValue = "true",
        matchIfMissing = false
)
@Import({WebConfig.class})
public class AuthorityAutoConfigruation {

    
}

2.5配置自动配置

在resourecs文件目录下创建META-INF,并创建我们自己的spring.factories,并把我们的 MemberStaterAutoConfiguration 添加进去

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.beiyou.AuthorityAutoConfigruation

最后打包成jar包,在我们的项目里面测试

2.6测试

引入依赖

        <dependency>
            <groupId>com.beiyou</groupId>
            <artifactId>spring-test</artifactId>
            <version>0.0.2-SNAPSHOT</version>
        </dependency>

在application.properties配置文件中添加我们相应的配置

spring.auth.enabled=false
spring.auth.pathPatterns=/**
spring.auth.excludePathPatterns=/hello

启动测试指定的路径是否拦截

在这里插入图片描述

3.使用spring-boot-configuration-processor生产配置元数据

3.1.引入Maven依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
  </dependency>

3.2.Idea配置如下(非必需)

在这里插入图片描述

3.3 编译打包后,自动生成spring-configuration-metadata.json文件

在这里插入图片描述

3.4 其它App应用使用时,就可以有如下提示

在这里插入图片描述

4.如何把源码上传到私仓库

4.1引入mvn依赖

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

4.2 打包如下图

在这里插入图片描述

4.3私仓

在这里插入图片描述

参考:

https://codeup.aliyun.com/62858d45487c500c27f5aab5/202/auth-spring-boot-starter

  • 42
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bridge Fish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值