Spring5框架新功能

整个Spring5框架的代码基于Java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除。

Spring5自带了通用的日志封装:log4j2

已经移除了log4jConfigListener

①导入所需的Jar包依赖

log4j-api-2.11.2.jar

log4j-core-2.11.2.jar

log4j-slf4j-impl-2.11.2.jar

log4j2.xml

slf4j-api-1.7.30.jar

②创建xml配置文件

名称固定为log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,可以看到log4j2内部各种详细输出-->
<configuration status="INFO">
<!--先定义所有的appender-->
<appenders>
<!--输出日志信息到控制台-->
<console name="Console" target="SYSTEM_OUT">
<!--控制日志输出的格式-->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</console>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<!--root:用于指定项目的根日志,如果没有单独指定Logger,则会使用root作为默认的日志输出-->
<loggers>
<root level="info">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>

控制台输出

"C:\Program Files\Java\jdk1.8.0_301\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\software\IntelliJ IDEA 2020.3.4\lib\idea_rt.jar=58596:D:\software\IntelliJ IDEA 2020.3.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\software\IntelliJ IDEA 2020.3.4\lib\idea_rt.jar;D:\software\IntelliJ IDEA 2020.3.4\plugins\junit\lib\junit5-rt.jar;D:\software\IntelliJ IDEA 2020.3.4\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_301\jre\lib\rt.jar;D:\Programing\Hikaru\out\production\Hikaru;D:\Programing\Hikaru\lib\com.springsource.net.sf.cglib-2.2.0.jar;D:\Programing\Hikaru\lib\com.springsource.org.aopalliance-1.0.0.jar;D:\Programing\Hikaru\lib\com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar;D:\Programing\Hikaru\lib\commons-logging-1.1.1.jar;D:\Programing\Hikaru\lib\spring-aspects-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-beans-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-context-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-core-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-expression-5.2.6.RELEASE.jar;C:\Users\admin\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\admin\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;D:\Programing\Hikaru\lib\spring-aop-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\mysql-connector-java-8.0.28.jar;D:\Programing\Hikaru\lib\spring-tx-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-orm-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\spring-jdbc-5.2.6.RELEASE.jar;D:\Programing\Hikaru\lib\druid-1.1.9.jar;D:\Programing\Hikaru\lib\log4j-api-2.11.2.jar;D:\Programing\Hikaru\lib\log4j-core-2.11.2.jar;D:\Programing\Hikaru\lib\log4j-slf4j-impl-2.11.2.jar;D:\Programing\Hikaru\lib\slf4j-api-1.7.30.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.hikaru.service.AccountService,test
2022-04-10 09:27:20.937 [main] INFO com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited Process finished with exit code 0

手动输出Log4j2日志:LoggerFactory.getLogger

public class Log4j2Test {
private static final Logger log = LoggerFactory.getLogger(Log4j2Test.class); public static void main(String[] args) {
log.info("info log4j2");
log.warn("warn log4j2");
}
}

核心容器

支持候选组件索引(也可支持环境变量扫描)

支持@Nullable注解

①加在属性上面表示属性可以为空

    @Nullable
@Autowired
private JdbcTemplate jdbcTemplate;

②加在方法上面可以表示属性返回值可以为空

③加在方法形参可以表示方法参数可以为空

    @Nullable
@Override
public void addMoney(@Nullable String id, double money) {
String sql = "update t_account set money=money+? where id=?";
jdbcTemplate.update(sql, money, id);
}

函数式风格:GenericApplicationContext

目的是为了将new的对象加入IOC容器中

    @Test
public void GenericContextText() {
GenericApplicationContext context =
new GenericApplicationContext();
//清空IOC容器
context.refresh();
context.registerBean(Book.class, () -> new Book());
Book book = context.getBean("com.hikaru.Book", Book.class);
System.out.println(book);
}

() -> new Book()为lambda表达式,lambda表达式允许将一个函数作为参数返回

如:(int x, int y) -> x + y,表示一个接收两个值并返回他们的和的函数

在IOC容器中注册Bean的时候并没有默认Bean的名字为首字母小写的类名,因此这里使用了Bean的全路径

也可以使用下面的方式指定IOC中Bean的名称:

    @Test
public void GenericContextText() {
GenericApplicationContext context =
new GenericApplicationContext();
//清空IOC容器
context.refresh();
context.registerBean("book", Book.class, () -> new Book());
Book book = context.getBean("book", Book.class);
System.out.println(book);
}

Spring5 支持整合JUnit5

整合JUnit4

①注解声明单元测试框架

②注解加载配置文件

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:bean.xml")
public class JUnitTest {
@Autowired
AccountService accountService; @Test
public void test1() {
accountService.accountMoney("1001", "1002", 500);
} }

@RunWith(SpringJUnit4ClassRunner.class) 可以使单元测试直接使用IOC容器,而不必通过applicationContext的方式

@ContextConfiguration("classpath:bean.xml")加载xml配置,执行IOC容器的一系列操作,所以下面的属性可以直接装配

Spring5整合Junit5

①引入Junit5的jar包

②创建测试类,同上

注解引用:

    @ExtendWith(SpringExtension.class)

配置文件引入注解:

    @ContextConfiguration("classpath:bean1.xml")    

复合注解,等同于上面的两个写法:

    @SpringJunitConfig("classpath:bean1.xml")

Spring WebFlux

【Spring5】框架新功能的更多相关文章

  1. Spring5框架学习笔记(详细)

    目录 01 Spring框架概述 02 IOC容器 IOC概念和原理 IOC BeanFactory接口 IOC操作 Bean管理(概念) IOC操作 Bean管理(基于xml方式) IOC操作 Be ...

  2. 《Spring5官方文档》新功能(4,3)

    <Spring5官方文档>新功能 原文链接 译者:supriseli Spring框架的新功能 这一章主要提供Spring框架新的功能和变更. 升级到新版本的框架可以参考.Spring g ...

  3. 【开源】OSharp3.0框架解说系列:新版本说明及新功能规划预览

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  4. 超详细!!Spring5框架开发笔记

    Spring5开发教程 简介 spring特性 sping是轻量级的开源的JavaEE框架 Spring可以解决企业应用开发的复杂性 Sping两个核心的部分:IOC和AOC IOC:控制反转.把创建 ...

  5. HTML5基本特性和新功能

    HTML5的基本特征 1.向前兼容性 核心理念——平滑过渡! 不支持html5的浏览器可以向前兼容,并不会影响web内容的显示! 2.跨平台运行性 从pc浏览器到手机.平板电脑,甚至是智能电视. 只要 ...

  6. 教你轻松看懂 iOS9 新功能

    2015苹果全球开发者大会在6月9日凌晨,美国旧金山举行,fir.im 整理了一部分的资料,帮助了解 iOS9 的新特性与功能,感兴趣的可以看下. 关于iOS9新增功能 在WWDC 2015上苹果介绍 ...

  7. JPA2.1 中三个提升应用性能的新功能

    经常在网上看到开发者们抱怨 JPA 性能低下的帖子或文章,但如果仔细查看这些性能问题,常会发现导致问题的根本原因大致包括以下几个: 使用过多的 SQL 查询从数据库中获取所需的实体信息,即我们常说的n ...

  8. Red Hat Enterprise Linux 7的新功能

     简介红帽最新版本的旗舰平台交付显著增强的可用性. 性能和可靠性. 丰富的新功能为架构. 系统管理员和开发人员提供所需的资源以更高效地进行创新和管理.架构师: 红帽® 企业 Linux® 7 适合 ...

  9. Windows 10新功能

    Windows 10 中面向开发人员的新增功能 Windows 10 及新增的开发人员工具将提供新通用 Windows 平台支持的工具.功能和体验.在 Windows 10 上安装完工具和 SDK后, ...

  10. iOS 通知的变化ios9-10,新功能展示

    二.新功能展示 1  使用 /iOS通知新功能玩法 2.  全面   iOS10里的通知与推送详情 一.变化 四.Notification(通知) 自从Notification被引入之后,苹果就不断的 ...

随机推荐

  1. 洛谷 P2105 K皇后 题解

    START: 2021-08-06 16:34:44 题目链接: https://www.luogu.com.cn/problem/P2105 题目详情: 小 Z 最近捡到了一个棋盘,他想在棋盘上摆放 ...

  2. pandas(随时更新)

    pandas处理一个表中的一列数据被另一个表中的另一列数据替换: df1=pd.DataFrame({'id':[1,2,3],'name':['Andy1','Jacky1','Bruce1']}) ...

  3. Web_Servlet四大域对象

    保存数据的对象作用于从大到小: ServletContext -- 保存数据到web项目中 Session(会话对象)  -- Request -- 保存当前请求(链),有转发就保存包括转发的数据 P ...

  4. CNN_LSTM

    1.keras/examples at master · keras-team/keras · GitHubhttps://github.com/keras-team/keras/tree/maste ...

  5. python C# DES 加密转换

    import time import base64 import pyDes import binascii def DESEncrypt(desKey, target): key = desKey[ ...

  6. centos下vi 命令用法

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  7. SAP B1 增加或删除单据,或者是新增修改BOM清单,报错‘出现内部错误时’,一般是控制过程 SBO_SP_TransactionNotification 里面的代码有问题,执行不下去了,因此一行行检查SQL代码,一般就能发现错误所在。

    SAP B1 增加或删除单据,或者是新增修改BOM清单,报错'出现内部错误时',一般是控制过程 SBO_SP_TransactionNotification 里面的代码有问题,执行不下去了,因此一行行 ...

  8. Docker+jenkins 运行 python 自动化

    一.实现思路 在 Linux 服务器安装 docker 创建 jenkins 容器 根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境) 运行新的 python 容器,执行 ...

  9. linux软件安装篇

    nginx篇 第一件事情 cd /etc/yum.repo.d mv CentOS-Base.repo CentOS-Base.repo.bak wget -O CentOS-Base.repo ht ...

  10. UIPath踩坑记一开发环境检查

      第一步:设置--设计--关闭新项目使用新式体验   第二步:Uipath与浏览器的通信护展是否已安装,如果没有安装需要点击安装   第三步:浏览器中安装的扩展是否已经打开