Spring5新功能

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Spring5新功能



前言

整合日志、Nullable注解、函数式风格编程、整合JUnit5、Webflux


一、整合日志功能

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

依赖:

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.17.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.17.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.17.1</version>
<!--            <scope>test</scope>-->
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>

log4j2.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<configuration status="DEBUG">
    <!--先定义所有的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>

然后写一个主函数运行,就发现日志输出变了,就会按照上面输出日志格式的设定。< configuration > 标签内的属性status="DEBUG",属性值可以改成OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL(任意一个,这里是优先级顺序)。

二、@Nullable注解

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

(1)注解使用在方法上面,方法返回值可以为空。

@Nullable
String getId();

(2)注解使用在方法参数里,方法参数可以为空。

public <T> void select(@Nullable String name,int id){
  ....
  ....
  return <T>;
}

(3)注解使用在属性上面,属性值可以为空

@Nullabele 
private String bookName;

三、函数式风格编程

函数式创建对象,交给Spring管理

代码:

package com.dragon.xintexing;
import com.dragon.spring5.User;
import org.springframework.context.support.GenericApplicationContext;
public class test1 {
    public static void main(String[] args) {
        //创建GenericApplicationContext对象
        GenericApplicationContext context=new GenericApplicationContext();
        //调用context的方法对象注册
        context.refresh();
        context.registerBean(User.class,()->new User());
        //获取在Spring注册的对象
        User user=(User) context.getBean("com.dragon.spring5.User");
        System.out.println(user);
    }
}

四、JUnit5单元测试框架

JUnit5的代码:

package com.dragon.xintexing;
import com.dragon.shiwu.service.UserService;
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;
import org.junit.jupiter.api.Test;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@ExtendWith(SpringExtension.class) //单元测试框架
@ContextConfiguration("classpath:bean8.xml")//加载配置文件
//@SpringJUnitConfig(locations = "classpath:bean8.xml")
public class J5test {
    @Autowired
    private UserService userService;
    @Test
    public void test1(){
        userService.accountMoney();
    }
}

上面的注释掉的@SpringJUnitConfig注解可以替代它上面的两个注解使用,是复合注解。

JUnit4的代码:

package com.dragon.xintexing;
import com.dragon.shiwu.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)//单元测试框架
@ContextConfiguration("classpath:bean8.xml")//加载配置文件
public class Jtest {
    @Autowired
    private UserService userService;
    @Test
    public void test1(){
        userService.accountMoney();
    }
}

大家可以自行对比一下

这里再补充一下bean8.xml代码:

大家不需要太注意我的配置文件,主要给你们模拟测试参考用的。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
                <property name="driverClassName" value="${pro.driverClass}"></property>
                <property name="url" value="${pro.url}"></property>
                <property name="username" value="${pro.username}"></property>
                <property name="password" value="${pro.password}"></property>
        </bean>
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
                <property name="dataSource" ref="dataSource"></property>
        </bean>
        <context:component-scan base-package="com.dragon.shiwu"></context:component-scan>
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                <property name="dataSource" ref="dataSource"></property>
        </bean>
<!--        开启事务注解-->
        <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
</beans>

总结

以上就是Spring5新功能的讲解,Webflu还未讲解,后面我会出一篇文章专门讲诉。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
4月前
|
XML Java Maven
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
这篇文章是Spring5框架的入门到实战教程,介绍了Spring5的新功能——整合日志框架Log4j2,包括Spring5对日志框架的通用封装、如何在项目中引入Log4j2、编写Log4j2的XML配置文件,并通过测试类展示了如何使用Log4j2进行日志记录。
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
|
6月前
|
Java Spring 容器
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
39 0
|
Java Spring 容器
六、spring5框架新功能
六、spring5框架新功能
115 0
|
消息中间件 前端开发 JavaScript
Spring Framework 6 中的新功能和增强功能
Spring Framework 6 中的新功能和增强功能
|
前端开发 Java 数据库连接
Spring Framework 6中的新功能和增强功能
在2022年11月16日,Juergen Hoeller发布了消息,称 Spring Framework 6将正式发布。Spring 6 是一个重要的版本,距离 Spring 5 发布有四年多了。通过本文的介绍,我们一起来快速了解 Spring 6发行版中的那些令人兴奋的特性。
462 1
|
Java 测试技术 Spring
Spring 5(六)新功能
对spring的一些新内容做整理,如junit
149 0
|
监控 Java 测试技术
Spring FrameWork 5.0 新功能 概览
Spring FrameWork 5.0 新功能 概览 JDK 8+ 和 Java EE7+ 以上版本 整个框架的代码基于java8 通过使用泛型等特性提高可读性 对java8提高直接的代码支撑 运行时兼容JDK9 Java EE 7API需要Spring相关的模块支持 运行时兼容Java EE8 API 取消的包,类和方法 包 beans.
1257 0
|
缓存 前端开发 Java
《Spring实战(第4版)》——1.4 Spring的新功能
当本书的第3版交付印刷的时候,当时Spring的最新版本是3.0.5。那大约是在3年前,从那时到现在发生了很多的变化。Spring框架经历了3个重要的发布版本——3.1、3.2以及现在的4.0——每个版本都带来了新的特性和增强,以简化应用程序的研发。
2533 0