IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 06-Spring5 新特性 -> 正文阅读

[开发测试]06-Spring5 新特性

从这章开始才是重点,前面的最多算是复习

运行时环境

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

日志封装

Spring5.0框架自带了通用的日志封装

  1. Spring5已经移除了Log4jConfigListener, 官方建议使用Log4j2

Spring框架整合Log4J2

引入JAR包

创建log4j.xml配置文件

在src下新建

<?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>

编写测试类

package com.dance.spring.learn.testdemo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestLog {

    public static final Logger log = LoggerFactory.getLogger(TestLog.class);

    public static void main(String[] args) {

        log.info("test logger.....");

    }

}

执行结果

2021-12-12 17:17:17.551 [main] INFO  com.dance.spring.learn.testdemo.TestLog - test logger.....

支持@Nullable注解

Spring5框架核心容器支持@Nullable注解

  1. @Nullable注解可以使用在方法上面,属性上面,参数上面,表示方法返回可以为空,属性值可以为空,参数值可以为空

方法上添加

返回值可以为空

方法参数列表添加

方法参数可以为空

属性上添加

属性值可以为空

我不是很理解,感觉这个@Nullable没啥用,应为本来就是可以为空的,但是在我看了一篇文章后,才发现也挺好用的

https://www.cnblogs.com/zhilili/p/12202079.html

就是这个大大写的,对于一些入参来说,可以很好的标识,该字段是否可以为空,有助于减少空指针异常等代码的编写,别人看的时候也很容易理解

函数式风格GenericApplicationContext

函数式风格创建对象,交给Spring容器进行管理

编写测试类

@Test
public void testGenericApplicationContext() {
  //1 创建 GenericApplicationContext 对象
  GenericApplicationContext context = new GenericApplicationContext();
  //2 调用 context 的方法对象注册
  context.refresh();
  context.registerBean("user1", User.class, User::new);
  //3 获取在 spring 注册的对象
  User user = context.getBean("user1",User.class);
  System.out.println(user);
}

执行结果

User{userId='null', userName='null', ustatus='null'}

Spring5整合Junit5

整合Junit4

引入依赖

编写测试类

package com.dance.spring.learn.testdemo;

import com.dance.spring.learn.jdbc.config.SpringJdbcConfig;
import com.dance.spring.learn.jdbc.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
// 使用value 指定xml也可以使用classes指定配置类
@ContextConfiguration(classes = SpringJdbcConfig.class)
public class JTest4 {

    @Autowired
    private UserService userService;

    @Test
    public void test(){
        userService.accountMoney();
    }

}

执行结果

十二月 12, 2021 5:43:57 下午 org.springframework.test.context.support.AbstractTestContextBootstrapper getDefaultTestExecutionListenerClassNames
信息: Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener]
十二月 12, 2021 5:43:57 下午 org.springframework.test.context.support.AbstractTestContextBootstrapper getTestExecutionListeners
信息: Using TestExecutionListeners: [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@4b952a2d, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@3159c4b8, org.springframework.test.context.support.DirtiesContextTestExecutionListener@73846619, org.springframework.test.context.transaction.TransactionalTestExecutionListener@4bec1f0c, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@29ca901e, org.springframework.test.context.event.EventPublishingTestExecutionListener@5649fd9b]
2021-12-12 17:43:58.847 [main] INFO  com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
转账完成,flower 账户支出100元

整合Junit5

引入依赖

编写测试类

package com.dance.spring.learn.testdemo;

import com.dance.spring.learn.jdbc.config.SpringJdbcConfig;
import com.dance.spring.learn.jdbc.service.UserService;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = SpringJdbcConfig.class)
public class JTest5 {

    @Autowired
    private UserService userService;
    
    @Test
    public void test(){
        userService.accountMoney();
    }

}

执行结果

2021-12-12 17:49:28.230 [main] INFO  com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
转账完成,flower 账户支出100元

优化

使用一个注解替换两个注解

//@ExtendWith(SpringExtension.class)
//@ContextConfiguration(classes = SpringJdbcConfig.class)
@SpringJUnitConfig(classes = SpringJdbcConfig.class)

执行结果也是一样的

完结撒花花,下一章开始WebFlux

?若有收获,就点个赞吧
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:35:34  更:2021-12-15 18:36:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 6:35:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码