面试记录-springboot自定义starter

这是我前天在面试的时候碰到的一个面试题: springboot如何自定义一个starter

首先我们要知道为什么要自定义starter?

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

但是在实际应用中呢,我们为什么要用这个东西?

其实从开发流程的角度上讲,很简单,如果我需要开发一个sdk、让别人可以使用,那我总不能让用户引入我的jar包之后再在启动类上添加我sdk需要扫描的bean吧,这就是自定义starter需要解决的一个问题。

正常使用的springboot项目 我们可以通过注解@Service、@Component、@Repository、@Controller来注册bean到ioc容器当中,如果引入一个ip解析的sdk,sdk内的类路径与本地的类路径不一致,那么本地的工程就扫描不到starter内的bean,就不能通过@Autowired或者是@Resource直接使用sdk内部的类方法,那么sdk内部是怎样实现的呢?

以下为sdk内部实现的主要步骤:(以ip解析功能为例,项目工程自己创建)

1、创建需要注册到IOC容器当中的类(如果我们正常创建一个bean实例的话只需要在类上添加@Component即可)

public class IpUtils {

    //使用servlet
    @Autowired
    private HttpServletRequest servletRequest;

    @PostConstruct
    public void init() {
        log.info("该类被实例化 ... ");
        log.info("IpUtils被实例化 ... ");
    }

    public String getIp() {
        return servletRequest.getRemoteAddr();
    }
    
}

2、config目录下通过配置完成bean的自动装配

public class IpUtilAutoConfiguration {
    
    @Bean
    public IpUtils ipUtils(){
        return new IpUtils();
    }
    
}

3、使用spring.factories配置需要加载的自动装配的配置类

在springboot工程下添加MATE-INF目录,然后在该目录下添加spring.factories文件

文件内添加需要自动配置的配置类

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.cloud.ies.provider.config.IpAutoConfiguration,\
com.cloud.ies.provider.config.IpUtilAutoConfiguration

4、此时启动项目,会看到类初始化时打印的日志@PostConstruct

到此,自定义starter完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值