Spring5新功能

news/2024/11/17 19:38:28/

文章目录

  • 前言
  • 一、整合日志功能
  • 二、@Nullable注解
  • 三、函数式风格编程
  • 四、JUnit5单元测试框架
  • 总结


前言

整合日志、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 {@Autowiredprivate UserService userService;@Testpublic 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 {@Autowiredprivate UserService userService;@Testpublic 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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://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还未讲解,后面我会出一篇文章专门讲诉。


http://www.ppmy.cn/news/1028527.html

相关文章

【c语言】字符函数与字符串函数(上)

大家好呀&#xff0c;今天给大家分享一下字符函数和字符串函数&#xff0c;说起字符函数和字符串函数大家会想到哪些呢&#xff1f;&#xff1f;我想到的只有求字符串长度的strlen,拷贝字符串的strcpy,字符串比较相同的strcmp,今天&#xff0c;我要分享给大家的是我们一些其他的…

【枚举+推式子】牛客小白月赛 63 E

登录—专业IT笔试面试备考平台_牛客网 题意&#xff1a; 思路&#xff1a; 首先是个计数问题&#xff0c;考虑组合数学 组合数学就是在考虑枚举所有包含1和n的区间 这个典中典就是枚举1和n的位置然后算贡献 双指针超时&#xff0c;考虑推式子&#xff1a; Code&#xff1a…

redis在java中的使用

redis在java中的使用 Redis是一个基于内存的key-value结构数据库&#xff0c;spring data redis是spring的一部分&#xff0c;对redis底层开发包进行了封装&#xff0c;可以直接使用Spring Data Redis简化操作。 5种常见的数据类型 Redis中key是字符串类型&#xff0c;value…

分布式文件存储系统-FastDFS

前言&#xff1a;FastDFS 是一个分布式文件存储系统&#xff0c;主要用于存储和管理大规模的文件数据&#xff0c;如图片、视频、文档等&#xff0c;是淘宝前架构师为了存储图片用C语言开发出来的系统。 服务端有两个组件 Tracker Server 与 Storage Server &#xff0c;对应两…

登录验证码实现

Hutool代码改造 Hutool 有参考文档&#xff1b;很多工具类&#xff1b;把一些功能都封装好&#xff1b;都不用你自己去写&#xff1b;直接调用它的工具类 它这里会详细告诉你引入方式Hutool <dependency><groupId>cn.hutool</groupId><artifactId>hu…

化工行业案例 | 甄知科技助力万华化学重构IT服务价值,打造信息中心ERP!

随着科技的发展&#xff0c;新材料的应用领域与日俱增&#xff0c;近年来&#xff0c;全球化工新材料产业发展整体步入高技术引领、产品迭代速度快、产业规模和需求不断扩大的阶段。一体化协同与数字化转型策略是实现化工新材料生产原料自给、节能降耗、降低排放和物料成本的重…

tomcat服务七层搭建动态页面查看

一个服务器多实例复制完成 配置tomcat多实例的环境变量 vim /etc/profile.d/tomcat.sh配置tomcat1和tomcat2的环境变量 进入tomcat1修改配置 测试通信端口是否正常 连接正常 toncat 2 配置修改 修改这三个 端口配置修改完成 修改tomcat1 shudown 分别把启动文件指向tomcat1…

04 mysql innodb record

前言 最近看到了 何登成 大佬的 "深入MySQL源码 -- Step By Step" 的 pdf 呵呵 似乎是找到了一些 方向 之前对于 mysql 方面的东西, 更多的仅仅是简单的使用[业务中的各种增删改查], 以及一些面试题的背诵 这里会参照 MySQL Internals Manual 来大致的看一下 i…