SpringBoot自定义start启动器图文教程(详细)

1.SpringBoot启动器原理

我们新建一个空的spring boot项目,他都是由启动类上标注了这个注解@SpringBootApplication在这里插入图片描述
我们猜想为什么他就能启动呢?我们点进@SpringBootApplication注解,可以看到
在这里插入图片描述
@EnableAutoConfiguration
在这里插入图片描述
点进AutoConfigurationImportSelector.class
在这里插入图片描述

总结:
发现 META-INF/spring.factories文件中,都是配置类

在这里插入图片描述

2.自定义starter

因此,我们仿照上天原理,自己写一个,架构如图,
场景:做个日志配置starter,只要在加了注解(@LogAnnotation())就能记录日志。
在这里插入图片描述

第一步,新建一个spring boot项目,取名为:spring-boot-starter-log,这是大致的项目结构图
在这里插入图片描述
第二步,
新建注解LogAnnotation类

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogAnnotation {
    String module() default "test";
}

第三步,新建配置类

@Configuration
@Import(LogSelector.class)
public class LogAutoConfiguration {
    @Bean
    public Object getObj(){
        System.out.println("自动生成Object对象到spring bean工厂");
        return new Object();
    }
}

第四步,新建文件,spring.factories,里面写第二步新建配置类信息
在这里插入图片描述

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.hsq.log.LogAutoConfiguration

第五步:文件LogAop类

@Aspect
@Order(-1)
public class LogAop {
    @Autowired
    @Qualifier("getObj")
    private Object getObj;

    @Around("@annotation(la)")
    public Object logRecord(ProceedingJoinPoint proceedingJoinPoint, LogAnnotation la) {
        Long start = System.currentTimeMillis();
        try {
            Object proceed = proceedingJoinPoint.proceed();
            System.out.println(la.module() + "模块的" +
                    proceedingJoinPoint.getSignature().getName() +
                    "方法,执行的耗时时间为:" +
                    (System.currentTimeMillis() - start) + "ms");
            System.out.println(getObj);
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return null;
    }
}

第六步,新建LogSelector类

public class LogSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{
                "com.hsq.log.aop.LogAop"
        };
    }
}

到这已经完成启动stater启动的配置了

测试,新建springboot-demo项目,maven中导入web,导入spring-boot-starter-log
在这里插入图片描述
在controller中

@RestController
@RequestMapping("/hello")
public class MyTestController {

    @LogAnnotation()
    @RequestMapping("/test")
    public String getTest() throws InterruptedException {
        Thread.sleep(2000);
        return "我正在测试自定义springboot的starter的启动器";
    }

    @LogAnnotation()
    @RequestMapping("aa")
    public String getString() {
        return "aaa";
    }
}

访问url,查看控制台信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值