我这样回答了Spring 5的新特性,面试官对我刮目相看

蔚落 2023-10-09 16:49 65阅读 0赞

在前面的系列文章中,文哥给大家讲解了两个非常核心的思想,那就是Spring的IOC和AOP思想。想必大家对于IOC和AOP的思想有了很深刻的理解。

在今天的文章里面,文哥给大家讲解Spring5的一些新特性,希望大家对Spring5框架的新特性有所了解。好了,现在大家就跟随文哥的脚步,来看看Spring5的新特性有哪些吧!
请添加图片描述

Spring5框架新特性概述

Spring5最令人兴奋的消息就是它提出了响应式的编程模型(Reactive Programming)。Spring5 框架同时兼容 Java8 和 JDK 9。提供了一种颠覆于传统WEB开发方式的编程风格。对于Spring5的升级,文哥给大家罗列了以下方面:

  • 基于JDK8,兼容于JDK9。
  • 对Kotlin支持。
  • 响应式的编程风格。
  • 对函数式WEB框架的支持。
  • 对Junit5的支持。

在这里文哥重点对响应式的编程风格和函数式的WEB框架支持给大家做一下介绍:

1.响应式的编程风格

响应式编程是Spring Framework 5.0最重要的更新之一。专注于构建对事件做出响应的WEB应用程序。Java8本身没有对响应式编程风格进行支持,但是一些其他的框架提供了对响应是编程风格的支持。文哥在这里给大家罗列一下:

  • Reactive Streams:尝试定义与语言无关的响应性API。
  • Reactor:Spring Pivotal团队提供的响应式编程的Java实现。
  • Spring WebFlux:启用基于响应式编程的Web应用程序的开发。提供类似于Spring MVC的编程模型。

2.函数式Web框架

除了响应式功能之外,Spring5 还提供了一个函数式Web框架。它提供了使用函数式编程风格来定义endpoints的功能。该框架引入了两个基本组件:HandlerFunction 和 RouterFunction。HandlerFunction 表示处理接收到的请求并生成响应的函数。

RouterFunction 替代了 @RequestMapping 注解。它用于将接收到的请求路由到处理函数。对于响应式编程风格和函数式WEB框架的支持,由于我们没有给小伙伴们介绍SpringMVC的知识,所以这部分内容我们放在SpringMVC系列文章中给大家介绍。接下来文哥给大家介绍Spring5中的其他新特性。

Spring5框架新特性

1.Spring5整合日志框架

Spring5本身提供了对日志封装的解决方案,官方建议我们使用Log4j2。接下来文哥就给大家演示Spring5对于日志框架的整合。

第一步:引入相关的依赖

  1. <dependency>
  2. <groupId>org.apache.logging.log4j</groupId>
  3. <artifactId>log4j-api</artifactId>
  4. <version>2.11.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.logging.log4j</groupId>
  8. <artifactId>log4j-core</artifactId>
  9. <version>2.11.2</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.apache.logging.log4j</groupId>
  13. <artifactId>log4j-slf4j-impl</artifactId>
  14. <version>2.11.2</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.slf4j</groupId>
  18. <artifactId>slf4j-api</artifactId>
  19. <version>1.7.30</version>
  20. </dependency>

第二步:创建日志配置文件

我们在项目里面创建日志文件,文件的名称叫log4j2.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <configuration status="DEBUG">
  3. <appenders>
  4. <console name="Console" target="SYSTEM_OUT">
  5. <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
  6. </console>
  7. </appenders>
  8. <loggers>
  9. <root level="info">
  10. <appender-ref ref="Console"/>
  11. </root>
  12. </loggers>
  13. </configuration>

第三步:测试日志整合是否生效

我们随便编写并运行一个测试类,查看控制台效果:

image.png

到这里我们Spring5整合Log4j2日志框架就成功了。

2.@Nullable注解

@Nullable注解是Spring5框架提供出来的一个新的注解。可以使用在方法上面,也可以应用到属性和参数上面,应用到方法上面表示方法返回可以为空,应用到属性上面表示属性值可以为空,应用到参数上面表示参数值可以为空。接下来文哥给大家演示一下注解的使用:

(1) 应用到方法上面。

我们可以查阅Spring的官方源码,在源码中关于@Nullable注解的使用地方有很多,在这里我们看看ApplicationContext的源码:

image.png

@Nullable注解修饰的getParent方法,说明这个方法的返回值是可以为NULL的。

(2) 应用到方法形式参数里面。

我们还是翻阅Spring的官方源码,这次我们查看AnnotationConfigApplicationContext类里面有一个注册bean的方法:

image.png

这意味着@Nullable注解修饰的beanName参数,外界在传值的时候可以传入NULL。

(3) 应用到属性上面

我们还是翻阅Spring的官方源码,现在我们查看ClassPathXmlApplicationContext类。

image.png

3.GenericApplicationContext 函数式风格的容器

在Spring5里面,还支持使用函数式的风格创建对象,并将对象交给容器管理,现在文哥给大家简单演示一下:4

  1. @Test
  2. public void testGenericApplicationContext() {
  3. //1 创建 GenericApplicationContext 对象
  4. GenericApplicationContext context = new GenericApplicationContext();
  5. //2 调用 context 的方法对象注册
  6. context.refresh();
  7. context.registerBean("account1", Account.class,() -> new Account(1002,"kobe",500.0));
  8. //3 获取在 spring 注册的对象
  9. Account user = (Account) context.getBean("account1");
  10. System.out.println(user);
  11. }

总结

通过这篇文章,文哥给大家介绍了Spring5的一些新特性。当然在本篇文章中,对于新特性的支持文哥仅仅只是抛砖引玉做了一些介绍

如果大家还想对Spring5的新特性有更多的了解,还请大家多多翻阅Spring的官方文档。

好了关于Spring5的新特性文哥就给大家介绍到这里了。我们下期文章再见!

发表评论

表情:
评论列表 (有 0 条评论,65人围观)

还没有评论,来说两句吧...

相关阅读