SpringBoot常见面试题

SpringBoot 常见面试题

1,什么是springboot? springboot 有什么优点?

简介: Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

优点:

  • 简化配置
    • 首先是他简化了 搭建 spring 环境的各种配置,使用 约定大于配置 的思想来帮助开发人员快速的搭建一个企业级的 spring 程序,因为开发人员只需要引入starters , spring boot 就可以自动依赖所有的相关依赖.简化了 maven 的配置.
  • 独立运行
    • Spring Boot而且内嵌了各种servlet容器,Tomcat、Jetty等,现在不再需要打成war包部署到容器中,Spring Boot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内。
  • 自动配置
    • Spring Boot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starterweb启动器就能拥有web的功能,无需其他配置。
  • 无代码生成和XML配置
    • Spring Boot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。
  • 应用监控
    • Spring Boot提供一系列端点可以监控服务及应用,做健康检测。

2, springBoot 的核心注解?

@SpringBootApplication

  • 这是Spring主类上最最最核心的注解,用于 自动化配置文件,表示这是一个SpringBoot项目,用于开启 SpringBoot 的各项能力。

    相当于

    • @SpringBootConfigration : @Configuration注解的变体,只是用来修饰Spring Boot的配置而已。

      • @Configuration: 用来代替applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在的类来进行注册。
    • @EnableAutoConfiguration:

      • 允许 SpringBoot 自动配置注解,开启这个注解之后,SpringBoot就能根据当前类路径下的包或者类来配置Spring Bean。
      • 例如: 当前路径下有MyBatis这个Jar包,MyBatisAutoConfiguration 注解就能根据相关参数来配置Mybatis的各个Spring Bean。
    • @ComponentScan

      • Spring 3.1添加的一个注解,用来代替配置文件中的component-scan配置,开启组件扫描,自动扫描包路径下的@Component注解进行注册 bean实例放到context(容器)中。

  • @ResponseBody

    • @ResponseBody 标记的控制方法,会将方法返回值通过springboot默认的转换器进行转换,然后附加在响应体中,最后IO回写给调用方 :
      @ResponseBody 若标记在控制上,则相当于对该类中所有的控制方法全部标记该注解。
      @ResponseBody 标记的控制方法不使用视图解析器,即不进行页面的跳转
  • @RequestMapping

    • 配置方法URL。
  • @RestController

    • @RestController 整合了 @Controller@ResponseBody 两个注解
    • 这个注解 的作用就是:
      • 会将方法返回值通过springboot默认的转换器进行转换,然后附加在响应体中,最后IO回写给调用方,并且不会进行页面的跳转
      • 加入 spring 的管理
  • @RequestParam

    • 控制方法允许直接使用 @RequestParam 标记的形参来接收请求参数
  • @PathVariable

    • 控制方法允许直接使用 @PathVariable 标记的形参来接收请求头中的路径参数。
  • @RequestHeader

    • 控制方法允许直接使用 @RequestHeader 标记的形参来接收请求头中的指定参数。
  • @CookieValue

    • 控制方法允许直接使用 @CookieValue 标记的形参来接收请求中的Cookie参数

springBoot自动化配置原理?

结论:

@SpringBootApplication等同于下面三个注解:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

其中@EnableAutoConfiguration是关键(启用自动配置),

内部实际上就去加载META-INF/spring.factories文件的信息,然后筛选出以EnableAutoConfiguration为key的数据,加载到IOC容器中,实现自动配置功能!

详解:

我们在搭建 springboot 环境的时候, 除了spring boot 的依赖之外, 就是在main 方法上面挂了一个@SpringBootApplication 的注解,然后我们的springboot 程序就可以跑起来了.这个注解里面包含三个重要的注解:

  • @SpringBootConfiguration:我们点进去以后可以发现底层是Configuration注解,说白了就是支持JavaConfig(配置类) 的方式来进行配置(使用Configuration配置类等同于XML文件)。
  • @EnableAutoConfiguration:开启自动配置功能(后文详解)
  • @ComponentScan:这个注解,学过Spring的同学应该对它不会陌生,就是扫描注解,默认是扫描当前类下的package。将@Controller/@Service/@Component/@Repository等注解加载到IOC容器中。
重点EnableAutoConfiguration

我们知道SpringBoot可以帮我们减少很多的配置,也肯定听过“约定大于配置”这么一句话

那SpringBoot是怎么做的呢?其实靠的就是@EnableAutoConfiguration注解。

简单来说,这个注解可以帮助我们自动载入应用程序所需要的所有默认配置

这个注解点进去可以发现这两个注解:

  • @AutoConfigurationPackage:自动配置包
  • @Import:给IOC容器导入组件

点进 @AutoConfigurationPackage 里面发现还是 @Import

进入到 @Import 里面查看发现最核心的代码:

@Override
public void registerBeanDefinitions(AnnotationMetadata metadata,
        BeanDefinitionRegistry registry) {
    
    register(registry, new PackageImport(metadata).getPackageName());
}

默认的情况下就是将:主配置类(@SpringBootApplication)的所在包及其子包里边的组件扫描到Spring容器中。

也许你会问:这个不就是 ComponentScan的功能吗?

比如说,

  • 你用了Spring Data JPA,可能会在实体类上写@Entity注解。这个@Entity注解由@AutoConfigurationPackage扫描并加载,

  • 而我们平时开发用的@Controller/@Service/@Component/@Repository这些注解是由ComponentScan来扫描并加载的。

他们的区别: 同样是扫描包 但是他们 扫描的对象是不一样的。

服务器运行Springboot 项目一般有哪些方式?

springboot项目运行有两种方式,一种是jar包(官方推荐),一种是war包。

jar包 : 相对简单,直接使用 springboot 内置的tomcat 服务器就可以运行

war包: 需要部署到单独的tomcat 服务器上.

SpringBoot 读取配置的三种方式?

  • @Value : 是比较常见的注入方式,功能强大但一般可读性较差。

  • Environment : 通过注入获取Environment对象,然后再获取定义在配置文件的属性值:

  • @Resource    
    private Environment environment;
                   
    public void getAttrByEnvironment() {
          
          String property = environment.getProperty(SPRING_BOOT_HELLO);
          System.out.println("2-1. 通过注入Environment获取值: " + property);
        }
    
  • 使用@ConfigurationProperties注解映射到bean中,定义一个User对象里面有nameage属性,在配置文件里使用spring.user作为prefix,为User增加对应注解即可

详情请点击 : https://cloud.tencent.com/developer/article/1343830

请谈谈对 SpringBoot 和 SpringCloud 的理解

保护SpringBoot 应用有哪些方法?

答案: https://cloud.tencent.com/developer/article/1461871

1、 在生产中使用HTTPS

2、 使用Snyk检查你的依赖关系

  • 官网地址:https://app.snyk.io/org
    在现在的开发中,不管是用什么语言,什么技术栈,我们都会用到很多的开源框架和包。从安全角度讲,这也变相的等于说我们信任陌生的开发者,信任其安全技术水平和相信他没有恶意。在关键业务系统中,仅凭信任肯定不靠谱的。Snky就是用来检查你的依赖包安全漏洞的工具,确保你放心引用各种开源依赖包到你的工程

3、 升级到最新版本

4、 启用CSRF保护 (https://tech.meituan.com/2018/10/11/fe-security-csrf.html) (推荐看一下)

  • 防护策略
------------------------------**什么是CSRF**-------------------------------------  
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值