spring6:2入门

spring6:2入门

目录

  • spring6:2入门
    • 2.1、环境要求
      • 2.2、构建模块
      • 2.3、程序开发
        • 2.3.1、引入依赖
        • 2.3.2、创建java类
        • 2.3.3、创建配置文件
        • 2.3.4、创建测试类测试
        • 2.3.5、运行测试程序
      • 2.4、程序分析
      • 2.5、启用Log4j2日志框架
        • 2.5.1、Log4j2日志概述
        • 2.5.2、引入Log4j2依赖
        • 2.5.3、加入日志配置文件
        • 2.5.4、测试
        • 2.5.5、使用日志

2.1、环境要求

  • JDK:Java17+(Spring6要求JDK最低版本是Java17)

  • Maven:3.6+

  • Spring:6.0.2

2.2、构建模块

(1)构建父模块spring6

在idea中,依次单击 File -> New -> Project -> New Project

image-20221205201741893

点击“Create”

image-20221205202000198

删除src目录

(2)构建子模块spring6-first

image-20221205202117383

点击 Create 完成

image-20221205202154225

2.3、程序开发

2.3.1、引入依赖

https://spring.io/projects/spring-framework#learn

添加依赖:

<dependencies><!--spring context依赖--><!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.2</version></dependency><!--junit5测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.3.1</version></dependency>
</dependencies>

查看依赖:

image-20221201105416558

2.3.2、创建java类
package com.atguigu.spring6.bean;public class HelloWorld {public void sayHello(){System.out.println("helloworld");}
}
2.3.3、创建配置文件

在resources目录创建一个 Spring 配置文件 beans.xml(配置文件名称可随意命名,如:springs.xm)

img007

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--配置HelloWorld所对应的bean,即将HelloWorld的对象交给Spring的IOC容器管理通过bean标签配置IOC容器所管理的bean属性:id:设置bean的唯一标识class:设置bean所对应类型的全类名--><bean id="helloWorld" class="com.atguigu.spring6.bean.HelloWorld"></bean></beans>
2.3.4、创建测试类测试
package com.atguigu.spring6.bean;import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class HelloWorldTest {@Testpublic void testHelloWorld(){ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");HelloWorld helloworld = (HelloWorld) ac.getBean("helloWorld");helloworld.sayHello();}
}
2.3.5、运行测试程序

image-20221031172354535

2.4、程序分析

1. 底层是怎么创建对象的,是通过反射机制调用无参数构造方法吗?

修改HelloWorld类:

package com.atguigu.spring6.bean;public class HelloWorld {public HelloWorld() {System.out.println("无参数构造方法执行");}public void sayHello(){System.out.println("helloworld");}
}

执行结果:

image-20221031181430720

测试得知:创建对象时确实调用了无参数构造方法。

2. Spring是如何创建对象的呢?原理是什么?

// dom4j解析beans.xml文件,从中获取class属性值,类的全类名// 通过反射机制调用无参数构造方法创建对象Class clazz = Class.forName("com.atguigu.spring6.bean.HelloWorld");//Object obj = clazz.newInstance();Object object = clazz.getDeclaredConstructor().newInstance();

3. 把创建好的对象存储到一个什么样的数据结构当中了呢?

bean对象最终存储在spring容器中,在spring源码底层就是一个map集合,存储bean的map在DefaultListableBeanFactory类中:

private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);

Spring容器加载到Bean类时 , 会把这个类的描述信息, 以包名加类名的方式存到beanDefinitionMap 中,
Map<String,BeanDefinition> , 其中 String是Key , 默认是类名首字母小写 , BeanDefinition , 存的是类的定义(描述信息) , 我们通常叫BeanDefinition接口为 : bean的定义对象。

2.5、启用Log4j2日志框架

2.5.1、Log4j2日志概述

在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析。日志记录了系统行为的时间、地点、状态等相关信息,能够帮助我们了解并监控系统状态,在发生错误或者接近某种危险状态时能够及时提醒我们处理,同时在系统产生问题时,能够帮助我们快速的定位、诊断并解决问题。

Apache Log4j2是一个开源的日志记录组件,使用非常的广泛。在工程中以易用方便代替了 System.out 等打印语句,它是JAVA下最流行的日志输入工具。

Log4j2主要由几个重要的组件构成:

(1)日志信息的优先级,日志信息的优先级从高到低有TRACE < DEBUG < INFO < WARN < ERROR < FATAL
TRACE:追踪,是最低的日志级别,相当于追踪程序的执行
DEBUG:调试,一般在开发中,都将其设置为最低的日志级别
INFO:信息,输出重要的信息,使用较多
WARN:警告,输出警告的信息
ERROR:错误,输出错误信息
FATAL:严重错误

这些级别分别用来指定这条日志信息的重要程度;级别高的会自动屏蔽级别低的日志,也就是说,设置了WARN的日志,则INFO、DEBUG的日志级别的日志不会显示

(2)日志信息的输出目的地,日志信息的输出目的地指定了日志将打印到控制台还是文件中

(3)日志信息的输出格式,而输出格式则控制了日志信息的显示内容。

2.5.2、引入Log4j2依赖
<!--log4j2的依赖-->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.19.0</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j2-impl</artifactId><version>2.19.0</version>
</dependency>
2.5.3、加入日志配置文件

在类的根路径下提供log4j2.xml配置文件(文件名固定为:log4j2.xml,文件必须放到类根路径下。)

<?xml version="1.0" encoding="UTF-8"?>
<configuration><loggers><!--level指定日志级别,从低到高的优先级:TRACE < DEBUG < INFO < WARN < ERROR < FATALtrace:追踪,是最低的日志级别,相当于追踪程序的执行debug:调试,一般在开发中,都将其设置为最低的日志级别info:信息,输出重要的信息,使用较多warn:警告,输出警告的信息error:错误,输出错误信息fatal:严重错误--><root level="DEBUG"><appender-ref ref="spring6log"/><appender-ref ref="RollingFile"/><appender-ref ref="log"/></root></loggers><appenders><!--输出日志信息到控制台--><console name="spring6log" target="SYSTEM_OUT"><!--控制日志输出的格式--><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-3level %logger{1024} - %msg%n"/></console><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用--><File name="log" fileName="d:/spring6_log/test.log" append="false"><PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/></File><!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFile" fileName="d:/spring6_log/app.log"filePattern="log/${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"><PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/><SizeBasedTriggeringPolicy size="50MB"/><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --><DefaultRolloverStrategy max="20"/></RollingFile></appenders>
</configuration>
2.5.4、测试

运行原测试程序

image-20221031214305224

运行原测试程序,多了spring打印日志

2.5.5、使用日志
public class HelloWorldTest {private Logger logger = LoggerFactory.getLogger(HelloWorldTest.class);@Testpublic void testHelloWorld(){ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");HelloWorld helloworld = (HelloWorld) ac.getBean("helloWorld");helloworld.sayHello();logger.info("执行成功");}
}

控制台:

image-20221031214547501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/485643.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

03、Node.js安装及环境配置

1.下载node.js 下载地址&#xff1a;Node.js 2.安装 2.1 自定义安装路径&#xff08;可以选择默认&#xff09; 下图根据本身的需要进行&#xff0c;我选择了默认Node.js runtime&#xff0c;然后Next&#xff1a; Node.js runtime &#xff1a;表示运行环境 npm package mana…

容器镜像仓库

文章目录 1、docker hub1_注册2_登录3_创建容器镜像仓库4_在本地登录Docker Hub5_上传容器镜像6_下载容器镜像 2、harbor1_获取 docker compose二进制文件2_获取harbor安装文件3_获取TLS文件4_修改配置文件5_执行预备脚本6_执行安装脚本7_验证运行情况8_访问harborUI界面9_harb…

在paddle中安装python-bidi出错

翻看网上解决方式&#xff0c;是由于系统中缺少 Rust 及其包管理器 Cargo。python-bidi 依赖 Rust 来编译其扩展&#xff0c;如果没有安装 Rust 和 Cargo&#xff0c;安装过程将无法继续。 解决方式 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh但是我的终端…

buuctf:被嗅探的流量

解压后用wireshark查看 flag{da73d88936010da1eeeb36e945ec4b97}

Windows 11 文件管理器隐藏主文件夹、图库和OneDrive

Windows 11 文件管理器隐藏主文件夹、图库和OneDrive 注册表编辑器⌈ 主文件夹 ⌋⌈ 图库 ⌋⌈ OneDrive ⌋ 注册表编辑器 使用 Windows R 快捷键打开「运行」对话框&#xff0c;执行 regedit 打开注册表编辑器。 ⌈ 主文件夹 ⌋ 注册表路径 &#xff1a; 计算机\HKEY_LOCA…

数据结构与算法-03链表-04

链表与递归 在链表操作中移除、反转经常会用到递归实现。通过力扣案例理解链表常规操作中的递归实现。 移除数据 删除链表的节点 问题 LCR 136. 删除链表的节点 - 力扣&#xff08;LeetCode&#xff09; 问题描述 给定单向链表的头指针和一个要删除的节点的值&#xff0c;定…

什么是敏捷(Agile)开发?Scrum和Kanban有什么关系?

最近面试过程中被问到和敏捷开发相关的内容&#xff0c;在产品实际工作中经常会涉及到敏捷开发&#xff0c;但其实我自己没有系列了解过敏捷开发&#xff0c;除了考PMP的时候接触了下&#xff0c;大多数都是在工作中实践积累的&#xff0c;太接地气&#xff0c;为了稍显理论知识…

OpenCV-平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…

容积卡尔曼滤波(CKF)仿真抛物线运动

容积卡尔曼滤波&#xff08;CKF&#xff09;仿真抛物线运动 容积卡尔曼滤波&#xff08;Cubature Kalman Filter, CKF&#xff09;的MATLAB实现。CKF是一种用于非线性系统状态估计的算法&#xff0c;它通过在状态空间中采样点&#xff08;容积点&#xff09;来近似非线性函数的…

leetcode:1995. 统计特殊四元组(python3解法)

难度&#xff1a;简单 给你一个 下标从 0 开始 的整数数组 nums &#xff0c;返回满足下述条件的 不同 四元组 (a, b, c, d) 的 数目 &#xff1a; nums[a] nums[b] nums[c] nums[d] &#xff0c;且a < b < c < d 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3…

几个Linux系统安装体验: 开源欧拉系统

本文介绍开源欧拉系统&#xff08;openEuler&#xff09;的安装。 下载 下载地址&#xff1a; https://www.openeuler.org/zh/download/archive/detail/?versionopenEuler%2022.03%20LTS 本文下载的文件名称为openEuler-22.03-LTS-x86_64-dvd.iso。 帮助文档地址如下&…

Data Uncertainty Learning in Face Recognition 论文阅读

Data Uncertainty Learning in Face Recognition 论文阅读 Abstract1. Introduction2. Related Work3. Methodology3.1. Preliminaries3.2. Classification-based DUL for FR3.3. Regression-based DUL for FR3.4. Discussion of Related Works 4. Experiments4.1. Datasets an…

用友BIP与旺店通数据集成方案解析

用友BIP与旺店通企业奇门的供应商集成同步方案 在现代企业的数据管理中&#xff0c;跨平台的数据集成是实现高效业务运作的关键环节。本文将分享一个实际案例&#xff1a;如何通过轻易云数据集成平台&#xff0c;将用友BIP系统中的供应商数据无缝对接到旺店通企业奇门&#xf…

代码随想录Day34 本周小结动态规划,62.不同路径,63. 不同路径 II,343. 整数拆分,96.不同的二叉搜索树。

1.本周小结动态规划 周一 在关于动态规划&#xff0c;你该了解这些&#xff01; (opens new window)中我们讲解了动态规划的基础知识。 首先讲一下动规和贪心的区别&#xff0c;其实大家不用太强调理论上的区别&#xff0c;做做题&#xff0c;就感受出来了。 然后我们讲了动…

vue中使用socket.io统计在线用户

目录 一、引入相关模块 二、store/modules 中封装socketio 三、后端代码(nodejs) 一、引入相关模块 main.js 中参考以下代码 ,另外socketio的使用在查阅其它相关文章时有出入,还是尽量以官方文档为准 import VueSocketIO from vue-socket.io import SocketIO from socket.io-…

Agent Network Protocol技术白皮书:一个对标Anthropic MCP的协议

Agent Network Protocol技术白皮书&#xff1a;一个对标Anthropic MCP的协议 Anthropic MCP让人们看到智能体通过API或协议与外部数据对接的巨大潜力。我们在几个月之前就发布了Agent Network Protocol技术白皮书&#xff0c;一个和MCP类似的协议&#xff0c;致力于解决智能体…

dbeaver安装

数据库常用的管理工具就是navicat&#xff0c;页面简洁大方&#xff0c;且易上手&#xff0c;唯一不好的就是要收费&#xff0c;个人使用的话可以用dbeaver&#xff0c;一款开源的数据库管理工具。 下载地址&#xff1a;https://dbeaver.io/download/ 直接下载这个windows(inst…

每日计划-1206

1. 完成 300. 最长上升子序列 有两种办法&#xff0c;一是使用状态规划&#xff0c;二是用二分法&#xff0c;递推。利用桶排序思想&#xff0c;出自最长递增子序列&#xff08;nlogn 二分法、DAG 模型 和 延伸问题&#xff09; | 春水煎茶 代码实现&#xff1a; class Soluti…

PHP 表单处理

在php接口中创建一个html&#xff0c;并添加一个提交按钮&#xff0c;当填写完文本框里面的内容后&#xff0c;点击提交会自动使用post方法传过去我们写的shop.php接口中。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&q…

Altium Designer学习笔记 29 PCB布线_信号线

基于Altium Designer 23学习版&#xff0c;四层板智能小车PCB 更多AD学习笔记&#xff1a;Altium Designer学习笔记 1-5 工程创建_元件库创建Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制Altium Designer学习笔记 11-15 原理图的封装 编译 检查 _PCB封装库的创建Al…