阅读 330

瞧瞧Spring官网的基础题,有没有你不会的?

前言

今天去Spring官网生成一个测试的小项目,无意间眼神扫到了网站Header上的Training & Certification模块, 也就是这里。

官网头部一共就四个链接,培训认证这个模块的字数还最长,从来没点进去看看,还有点不好意思。笔者大概探究一下这个模块有什么有用的信息。

初探

进到Training & Certification之后,一共有三个分类:

  • Spring Training
  • Spring Certification
  • Spring Consulting

第一个分类是培训相关,Spring官方的培训,听着就正规,随便点开一个课程看一下价格:

作为一个二线末城市的程序员,怕是要攒个几年。 这个模块就先放一放吧。

第三个模块主要是联系Spring进行咨询顾问等服务。针对个人的话,我觉得stackoverflow做consultants就够了😄

正文

第二个模块 是Spring官方的个人能力认证系统,可以参加Spring的考试,通过后官方会给你一个“印刷精美”的证书。
考试什么的,先放一边,页面上有两个试前的参考资料还是比较有用的,其中“Study Guide”可以让Spring入门的同学,作为基础学习重点来用。

资料里对各个模块的常见问题进行了展示,模块基本覆盖了Spring主流的一些内容:容器依赖、ioc,aop,data jpa,security、test,springboot等等..
我们可以顺着目录,点到问题列表里进行查阅,比如关于AOP的问题:

官方的问题,还是比较权威的(只是问题,没有答案),笔者也从整个PDF中,挑了其中五个问题来和大家探讨。也推荐大家去官方下载下来这个资料,看看自己能不能全部答得上来。

分享资料中几个问题

  1. 【Container, Dependency, and IOC】Are beans lazily or eagerly instantiated by default? How do you alter this behavior?
    默认实例化加载Bean是懒加载还是立即加载?如何更改?

一道ioc相关的题,众所周知,Spring是即时加载初始化Bean的,那么有什么优点?官方文档中提到了,立即加载这种模式,比较容易观察到配置或周围环境中的错误。

那么如何切换到懒加载模式?笔者介绍一下springboot的方式,分为两种:

  • 单个Bean如果要使用懒加载模式,可以在Bean的方法或者类上加入@Lazy注解
  • 全部Bean都要懒加载? 那么在@ComponentScan注解中,增加lazyInit = true属性即可
  1. 【Aspect oriented programming】What do you have to do to enable the detection of the @Aspect annotation? What does @EnableAspectJAutoProxy do?
    怎样才能让@Aspect注解生效?@EnableAspectJAutoProxy注解都做了什么?

一道aop相关的题,看到问题,是不是有种学校时期的考试卷风格?后面的问题就是前面问题的答案啊😂
没错使用@EnableAspectJAutoProxy注解就会让@Aspect生效,但是别忘了要写在被@Configuration修饰的类中。
EnableAspectJAutoProxy自然就是启用代理条件,Spring源码中会根据你配置了@Enablexxxxx 来启用不同的功能。顺便说一下,强制启用CGLib进行动态代理,也是这个注解,将proxyTargetClass属性改为true即可。

  1. 【REST】When do you need @ResponseStatus?
    什么时候需要用到@ResponseStatus注解?

@ResponseStatus是本次处理对应的响应码,有些项目采用标准的REST风格进行通信,可能就要用它了,比如处理正常,但是没有内容可返回,就要用到@ResponseStatus(HttpStatus.NO_CONTENT)返回一个204。
不过也有很多项目采用200 + 自定义业务code,比如:{"code":1000, "msg" : "success"} 两种风格,笔者认为都很规范。

  1. 【Spring Boot Intro】How do you configure default schema and initial data?
    如何配置和初始化数据库以及数据?

这个感觉用的不是很多,但是也有一些场景是要用到的。 首先要确保spring.datasource.initialize这个配置没有关掉,之后把sql文件扔到根目录里即可。规范上来讲是有两个文件

  • schema.sql 存放表结构等
  • data.sql 存放数据

如果配合spring.datasource.platform效果更佳,比如你有data-mysql.sql、data-sqlite.sql、data-postgre.sql,修改spring.datasource.platform=mysql就能指定用mysql这份脚本初始化,其他同理。

  1. 【Spring Boot Actuator】What value does Spring Boot Actuator provide?
    Spring Boot Actuator能提供什么有价值的东西?

Spring Boot Actuator是一套Spring官方的监控程序,能够提供运行状况,指标,信息,转储,环境等。采用HTTP或JMX Bean进行交互,出这道题怕是Spring不希望用户忘了自己官方也有一套程序监控插件。

结尾

学习免不了实践,顺着的问题,自己去寻找答案才会更有意思!