框架笔记 -SpringBoot

7 篇文章 0 订阅
4 篇文章 0 订阅

Junit的推荐用法

@SpringBootTest(classes = 引导类.class)  // 表示当前是测试类  指定引导类是谁
@RunWith(SpringRunner.class)  // 让junit和spring整合
  • Junit不写RunWith的话,Test注解要使用带有api的那个包

SpringBoot自动装配原理

  • 大致版

    1. SpringBoot项目启动时会加载Spring-Boot-Autoconfigure包下的META-INF下的Spring.factories文件

      import+selector选择器

    2. spring.factories文件配置了120多个自动装配类的路径

    3. 不是所有的自动装配类都生效,是否生效取决于类似的方法上的条件注解,例: @ConditionalOnClass(RedisOperations.class)

    4. 条件注解是否生效又取决于pom文件是否导入了对应的starter

  • 源码版

    1. 主启动类的@SpringBootApplication注解内
    2. 关键注解: @SpringBootConfiguration导入Spring的相关配置、@EnableAutoConfiguration最重要、@ComponentScan扫描并导入了一些包到我们的容器内
    3. @EnableAutoConfiguration中的@Import({AutoConfigurationImportSelector.class}),该类继承了ImportSelector,而ImportSelector中有selectImport方法,该方法的作用是选取一些类导入到我们的Ioc容器内
  • 润色版

    自动装配即自动的把我们所需要的bean装载到Ioc容器内,我们如果要实现自动装配,只需要在启动类上加上@SpringBootApplication,而@SpringBootApplication这个注解想要实现自动装配又需要内部包含的@EnableAutoConfiguration注解,而具体实现自动注入有需要以下三个条件:

    • 引入的starter内部必须包含有@Configuration注解的启动类,而该组件中需要我们自动注入项目的bean对象又必须要加上@Bean注解
    • 刚刚提到的配置类比如是放在第三方的jar包中,通过SpringBoot中约定优于配置的理念,把这个配置类的全路径放在classpath:/META-INF/spring.factories文件里面,然后,SpringBoot就可以知道第三方jar包里面这个配置类的位置,这一步主要是依靠Spring的SpringFactoriesLoader来实现的
    • SpringBoot拿到所有的第三方jar包里面的配置类之后,再通过@EnableAutoConfiguration中的@Import({AutoConfigurationImportSelector.class})注解里面的AutoConfigurationImportSelector类中继承了ImportSelector类中的selectImport方法实现对这些配置类的动态加载
  • 扩展

    SpringBoot是约定优于配置的,所以在很多情况下都有这一理念的体现,这一特点可以使程序员更加专注与业务代码的编写,而不是忙于配置的实现;

    自动装配的实现在SpringFramework3.x版本里面就已经有了雏形,当时基于模块驱动的理念,使用@Enable注解就能自动打开某个功能,而不需要针对这个功能去增加配置,所以@Enable注解也是根据相关需要,帮我们去实现相关的bean的注入的

Controller参数

  • @RequestParam: http://localhost/user?id=?
  • @RequestBody: JSON
  • @PathVariable: http://localhost/user/1
  • 默认什么也不加:

CommandLineRunner接口和@PostConstruce注解有什么区别

  • CommandLineRunner接口是SpringBoot提供的接口,作用是SpringBoot项目完全启动后,会运行该接口的run方法,可以做数据的初始化

  • @PostConstruct: 修饰的方法是在当前类实例化后,属性注入之后就会运行,也可以做数据初始化工作,运行时机早于CommandLineRunner接口的run方法

    @PostConstruct
    public void init(){
    	System.out.println("当前类实例化后,属性注入之后就会运行,也可以做数据初始化工作");
    }
    

自制Starter

步骤

  1. 新建模块并导入所需依赖

  2. 编写该模块并暴露接口

    1. resources/MATE-INF/spring.factories文件编写暴露出的服务的接口的实现类的路径,确保可以自动装配

      org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
      自己的路径.impl.某serviceImpl
      
    2. 所需比如ip等配置需手写一个配置类,从配置文件读取,自定义配置文件结构

    3. 确保已经测试通过

  3. 引入的模块引入该自定义模块,编写配置类

  4. 测试

SpringBoot继承异步线程调用

  1. 在引导类上添加@EnableAsync注解开启异步调用
  2. 在方法上加@Async注解(表明要异步调用,默认是新建线程的方式移除调用,如果需要引入线程池可以@Async("线程池beanid"))
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值