springboot高级灵魂拷问

1、SpringBoot自动化配置的实现原理?

  • 在引导类的springbootApplication里面有一个有@EnableAutoConfiguration注解
  • 在@EnableAutoConfiguration注解里面有一个@Import(AutoConfigurationImportSelector.class)
  • AutoConfigurationImportSelector类里面有一个selectImports(AnnotationMetadata annotationMetadata)
  • selectImports(AnnotationMetadata annotationMetadata)里面有一个getAutoConfigurationEntry(annotationMetadata)方法
  • getAutoConfigurationEntry(AnnotationMetadata annotationMetadata)方法里面有一个getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)方法
  • getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)方法里面有一个断言
  • Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you " + “are using a custom packaging, make sure that file is correct.”);

断言如果这个文件META-INF/spring.factories就报错,说明会自动加载这个配置文件

  • 但是并不是所有的bean都会被初始化,在配置类中使用Condition来加载满足条件的bean

3、在Maven项目中如何排除一个jar包?

  • 打开maven依赖版图,找到需要排除的类右键排除
  • 在pom.xml里面的jar包使用exclusions标签排除jar

4、SpringBoot导入其它包的3种方式?

第一种

  • 在pom.xml文件中导入其他模块的maven依赖
  • 那个模块的配置类上加上@Configuration
  • 在需要用的模板的引导类上加上@ComponentScan(“其他模板的配置类”)

第二种

  • 使用@Import(需要导入的模块的配置类字节码文件)

第三种

  • 加@EnableUser注解

5、CommandLineRunner和ApplicationRunner的区别是什么?

  • 他们实现类的run方法参数不同
  • 如果不配置@Order会默认执行ApplicationRunner

6、SpringBoot内置了那些常用条件注解?作用是?(至少8个)

  • @ConditionalOnBean:仅在当前上下文中存在某个bean时,才会实例化这个Bean
  • @ConditionalOnClass:某个class位于类路径上,才会实例化这个Bean
  • @ConditionalOnMissingClass:某个class在类路径上不存在的时候,才会实例化这个Bean
  • @ConfigurationProperties:将配置文件中的参数映射成一个对象,通过prefix来设定前缀
  • @SpringBootApplication:自配配置
  • @SpringBootTest:注解进行单元测试
  • @ConditionalOnWebApplication:这是一个Web应用程序
  • @Inject:JSR-330提供的注解
  • @EnableConfigurationProperties(“自定义配置类的字节码文件”)自动加载自定义的配置类

7、SpringBoot项目打包成可独立运行的jar包步骤是?

  • maven配置打包插件
  • maven- >packege
  • 找到jar包所在路径
  • 打开powershell框口
  • 输入java -jar 文件名

8、SpringBoot项目打包成Tomcat可运行的war包步骤是?

  • 在项目的pom.xml配置打包方式<packaging>war</packaging>
  • maven- >packege
  • 找到war包所在路径
  • 复制到tomcat webapp目录下
  • 打开tomcat运行
  • 输入tomcatwebapp下的war解压后的访问路径

9、SpringBoot自定义stater的步骤是?

  • 定义一个配置模块和一个依赖配置的模块
  • 配置模板自定义配置类和实体类
  • 在META-INF下创建spring.facotories配置EnableAutoConfiguration对上自定义的配置类的全路径类名
  • 在springboot模块pom.xml导入依赖配置模板的maven依赖

10、RequestMapping 和 GetMapping 的不同之处在哪里?

  • @RequestMapping可以指定GET、POST请求方式

  • @GetMapping等价于@RequestMapping的GET请求方式

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @RequestMapping(method = RequestMethod.GET)
    public @interface GetMapping {
    }
    
  • 在限定使用get请求时使用@GetMapping更加简洁方便

  • 可读性更强

11、SpringBoot学习过程中,你收获的注解有那些?作用是?(至少5个)

  • @SpringBootApplication:里面有@EnableAutoConfiguration和@ComponentScan自动配置
  • @EnableAutoConfiguration:自动配置spring.factories文件的属性
  • @ConfigurationProperties:用于读取类和配置文件的带前缀的属性
  • @EnableUser:导入其他模块的类
  • @ConditionalOnClass:作用在类上能够获取到这个类的字节码文件,才会实例化这个Bean

12、在SpringBoot中导入redis之后,项目启动会自动初始化redis相关实例,那么如果不想在启动时自动初始化且项目也包含redis包,怎么办?

  • 在@springbootApplication注解内添加(exclude = {排除不需要自动初始化的包}
  • 使用@ComponentScan的@excludeFilters属性用来排除不像扫描的bean

13、在SpringBoot中,如何监听项目启动完成事件?

自定义类MySpringApplicationRunListener实现SpringApplicationRunListener接口重写running(ConfigurableApplicationContext context)方法加载时机在项目启动完成时。

14、Actuator是什么?使用它能够查看应用的那些信息?

是springboot自带的监控功能

请求方式请求路径描述鉴权
GET/autoconfig自动配置的使用情况true
GET/beans所有springboot 的beanstrue
GET/dump线程栈true
GET/env所有环境变量true
GET/health查看健康指标false
GET/info查看应用信息false
GET/trace查看基本追踪信息true
POST/shotdown允许以优雅的方式关闭true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值