2下载Spring,第一个Spring程序+Log4j

https://www.yuque.com/dujubin/ltckqu/kipzgd#,注意的是,现在(202401)SpringFramework从release搬到了snapshot下,在这下面找到6.0.2下载.

下载后解压到文件夹,整个框架包含非常多jar包。

然后就可以在pom文件中写入依赖,声明需要的用的jar包。

如果只需要最基本IoC、DI支持,则只需要context包,而context包依赖于其他包,如果采用maven,只要导入context一条依赖即可。


新建一个module,spring6-002,选好SDK版本,maven构建。

老规矩,pom文件入手
1.打包方式选择jar(学习spring不必是web项目,故jar打包即可)
2.添加6.0的spring-context依赖,添加后检查右侧maven目录,会发现自动导入了aop,core,bean等下级依赖.

<packaging>jar</packaging><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.2</version></dependency>S

在这里插入图片描述引入单元测试junit依赖…每次引入的依赖.如果之前已经引用过远程仓库,则已经下载到了本地仓库,此时自己打就会有提示,否则就要从远程仓库查询

   <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>

3.与mybatis一致,spring也需要在类的根目录路径下(resources)写一个配置文件,创建方式如下.起名为spring.xml在这里插入图片描述4.编写代码,结构如下图

在这里插入图片描述

src\main\java\com\sunsplanter\spring6\dao\UserDaoImplForMySQL
package com.sunsplanter.spring6.dao;
//快速测试第一个程序,就不写接口了
public class UserDaoImplForMySQL {
}
src\main\resources\spring.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--    每个bean标签管理一个对象id是唯一的,与mybatis的配置文件非常相似class属性声明要管理哪个类中的对象,路径必须完整包含包名-->
<!--    注意,bean标签不是成对的<bean></bean>--><bean id="userDaoBean" class="com.sunsplanter.spring6.dao.UserDaoImplForMySQL"/>
</beans>
src/test/java/com/sunsplanter/spring6/test/FirstSpringTest.java
package com.sunsplanter.spring6.test;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class FirstSpringTest {@Testpublic void testFirstTest(){//1.与mybatis思想也很相似,写好了容器的配置规格和管理对象(spring.xml),下一步就是想办法制造(获取)出一个容器,用这个容器创建和管理对象//ClassPathXmlApplicationContext的参数为spring配置文件的地址//applicationContext就是一个spring容器的对象实例,ApplicationContext是一个接口,其有很多实现类,ClassPathXmlApplicationContext就是其中之一
//        ClassPathXmlApplicationContext专门从类的跟路径中加载spring配置文件,因此配置文件只要放在resources下就可以不写全路径
//        默认情况下Spring会通过反射机制,调用类的无参构造方法实例化对象,执行完new读取了配置文件后,对象就已经创建完成ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");//      2.上句代码执行完成后对象已经创建存在了,getBean是根据bean的id,从spring容器获取要控制的对象Object userBean = applicationContext.getBean("userDaoBean");System.out.println(userBean);}
}

执行test方法,可以正确输出spring帮忙创建并管理的对象(bean).

几个问题
1.Spring创建好的对象如何存储?
在这里插入图片描述
2.Spring配置文件的名字是任意的.
3.Spring配置文件的数量的任意的,只要名字不重复即可,最终都可通过

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");

选择加载的配置文件.

4.配置文件中的类并不一定要自定义类,即使是JDK中的类也可以,只要确保有无参构造方法即可.

测试3和4
resources下新建一个Spring配置文件,命名为Date.xml

   <bean id="dateBean" class="java.util.Date"/>
src/test/java/com/sunsplanter/spring6/test/FirstSpringTest.java
package com.sunsplanter.spring6.test;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class FirstSpringTest {@Testpublic void testFirstTest() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");Object dateBean = applicationContext.getBean("dateBean");System.out.println(dateBean);}
}

此时因为是直接调用Spring创建一个JDK自身的类,因此在src/main/java/com/sunsplanter/spring6目录下,无需声明一个实体类.直接运testFirstTest即可.可以得到输出:
在这里插入图片描述
**5.一个现实以及很重要的问题:**对于上例中的,假如增加了一个方法(事实上实现类肯定有各种各样的方法)

src\main\java\com\sunsplanter\spring6\dao\UserDaoImplForMySQL
package com.sunsplanter.spring6.dao;
//快速测试第一个程序,就不写接口了
public class UserDaoImplForMySQL {public void insert(){System.out.println(1);}
}

再看:原本有一个类(不写接口,简单程序),且原本要在上层类中new出下层类的实例

//这是表现层中实现类中的代码,可以看出,表现层调用了控制层的类去new出对象,返回了具体类型的对象,既 人 张三 = new 人
private Userservice userService = new UserServiceImp();
//既然返回的是举行类型的对象,就可以调用该抽象类中定义的方法
userservice.insert();

但为了OCP,IoC,DIP等原则,new出实例对象全部交给了Spring容器,然而,以上章为例

//然而若用了Spring,通过获取配置文件制造一个容器(applicationContext)-通过容器调用getBean获取一个Object类型的UserDaoImplForMySQL对象
//该对象名为userBean.此时,由于该对象是Object类型的,它无法自己对应抽象类的方法ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");Object userBean = applicationContext.getBean("userDaoBean");userBean.insert();//错误//将getBean方法多设置一个参数,指明返回具体类型的对象UserDaoImplForMySQL userDaoImplForMySQL = applicationContext.getBean("userDaoBean", UserDaoImplForMySQL.class);userDaoImplForMySQL.insert();//执行成功

启用Log4j2日志(Spring集成了Log4j2)
第一步:引入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>

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

<?xml version="1.0" encoding="UTF-8"?><configuration><loggers><!--level指定日志级别,从低到高的优先级:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF--><root level="DEBUG"><appender-ref ref="spring6log"/></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></appenders></configuration>

第三步:使用日志框架

src/test/java/com/sunsplanter/spring6/test/FirstSpringTest.javaLogger logger = LoggerFactory.getLogger(FirstSpringTest.class);logger.info("我是一条日志消息");logger.debug("de");logger.error("er");

注意的是,JDK本身提供了Logger类,使用时一定要先添加依赖-更新maven-手打选择org.slf4j的定义的Logger,直接复制会爆红.
在这里插入图片描述

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

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

相关文章

工业物联网中的网络建设是如何实现的?——青创智通工业物联网

在工业物联网的应用中&#xff0c;如何进行网络建设&#xff0c;对于青创智通工业物联网来说&#xff0c;车间内所有装备均可通过与OPC UA网关连接实现数据采集&#xff0c;OPC UA网关实现Modbus协议、DLT645协议、BACnet协议、CJ188协议、三菱协议、西门子协议、Mbus协议。 通…

信号强度功能 界面、逻辑和图标(免费)

信号强度 需求 vue项目&#xff0c;需要实时监控系统信号&#xff0c;要求&#xff1a; 1.共五格信号&#xff1b; 2.信号0-100为满值&#xff0c;信号100-500为四格&#xff0c;信号500-1000为三格&#xff0c;信号1000-5000为两格&#xff0c;信号5000-20000为一格&#x…

Spring Boot 完善订单【五】集成接入支付宝沙箱支付

1.1.什么是沙箱支付 支付宝沙箱支付&#xff08;Alipay Sandbox Payment&#xff09;是支付宝提供的一个模拟支付环境&#xff0c;用于开发和测试支付宝支付功能的开发者工具。在真实的支付宝环境中进行支付开发和测试可能涉及真实资金和真实用户账户&#xff0c;而沙箱环境则提…

快速搭建知识付费平台?明理信息科技,为你提供一站式解决方案

明理信息科技知识付费saas租户平台 在当今数字化时代&#xff0c;知识付费已经成为一种趋势&#xff0c;越来越多的人愿意为有价值的知识付费。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。同时&#xff0c;开发和…

Time-series forecasting with deep learning: a survey

人们开发了许多深度学习架构来适应不同领域的时间序列数据集的多样性。在本文中&#xff0c;我们调查了一步前进和多水平时间序列预测中使用的常见编码器和解码器设计&#xff0c;描述了如何将时间信息纳入每个模型的预测中。接下来&#xff0c;我们重点介绍混合深度学习模型的…

Kubernets(K8S)启动和运行 01-02 Kubernetes的速度非常快

Kubernetes的速度非常快 简介&#xff08;Intoduction&#xff09; Velocity is the key component in nearly all software development today. The software industry has evolved from shipping products as boxed CDs or DVDs to software that is delivered over the ne…

计算机组成原理-输入输出系统和IO控制方式

文章目录 总览现代计算机的结构常见的IO设备主机如何与IO设备交互IO控制方式简介程序查询方式程序中断方式DMA控制方式通道控制方式 IO系统基本组成小结 总览 现代计算机的结构 常见的IO设备 主机如何与IO设备交互 IO控制方式简介 数据寄存器&#xff1a;存放主机要输出到外设…

输出回文数-第11届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第23讲。 输出回文数&#…

openwrt使用docker部署adguard home

docker创建macvlan&#xff0c;目的使adguard home具备宿主机同网段IP docker network create -d macvlan --subnet192.168.88.0/24 --gateway192.168.88.254 -o parentbr-lan bridge-host&#xff08;虚拟网卡名字)拉取adguard home镜像 docker pull adguard/adguardhome:la…

【数据采集】Python爬虫「序」

Python网络爬虫简介 爬取方式 Xpath Selenium库 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safa…

为何Selenium这么火?

今天给大家带来的主题是自动化测试框架Selenium&#xff0c;话不多说&#xff0c;直接开始&#xff01; 1.什么是 Selenium 自动化测试 Jason Huggins 于 2004 年创建了一个 JavaScript 框架&#xff0c;旨在将其从重复的手动测试中解放出来。 最初命名为 JavaScriptTestRunn…

【数据结构—二叉树的链式结构实现】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、二叉树的存储结构 二、二叉树链式结构的实现 2.1手动构建一课树 2.2二叉树的遍历 三、二叉树链式结构的实现 3.1前序遍历(递归) 3.2中序遍历(递归) 3.3后序…

2023年广东省网络安全B模块(笔记详解)

模块B 网络安全事件响应、数字取证调查和应用安全 一、项目和任务描述: 假定你是某网络安全技术支持团队成员,某企业的服务器系统被黑客攻击,你的团队前来帮助企业进行调查并追踪本次网络攻击的源头,分析黑客的攻击方式,发现系统漏洞,提交网络安全事件响应报告,修复系统…

第三方软件测试机构可提供哪些服务类型?如何收费?

随着高新技术的快速发展&#xff0c;软件企业将测试工作交由第三方软件测试机构进行已经成为了行业趋势&#xff0c;因为企业自身的大多精力都投入在产品开发上&#xff0c;第三方软件测试机构的存在也就极大的提供了便利。 第三方软件测试机构是区别于软件企业与软件需求方的…

fetch 流式请求

async function getStream() {try {let response await fetch(/chat/stream/你好&#xff1f;); // /chat/stream/后面跟问题if (!response.ok) {throw new Error(Network response was not ok);}const reader response.body.getReader();const textDecoder new TextDecode…

Spark内核解析-节点启动4(六)

1、Master节点启动 Master作为Endpoint的具体实例&#xff0c;下面我们介绍一下Master启动以及OnStart指令后的相关工作 1.1脚本概览 下面是一个举例&#xff1a; /opt/jdk1.7.0_79/bin/java -cp /opt/spark-2.1.0/conf/:/opt/spark-2.1.0/jars/*:/opt/hadoop-2.6.4/etc/ha…

MatrixOne 完成与飞腾处理器的兼容互认

近日&#xff0c;矩阵起源超融合数据库 MatrixOne 企业版软件V1.0&#xff08;简称 MatrixOne 企业版&#xff0c;下同&#xff09;与飞腾两款处理器完成兼容性适配&#xff0c;此次适配测试覆盖两款处理器&#xff0c;分别是 FT-2000/64 和飞腾腾云S2500。测试显示 MatrixOne …

科研+临床观摩|牙科医生公派美国从事访问学者交流

很多临床医学专业的访问学者希望在访学从事科研的同时&#xff0c;能到医院进行临床观摩。对于这些申请者的要求&#xff0c;我们会尽量满足。本案例中的T医生&#xff0c;口语较弱&#xff0c;担心英语面试&#xff0c;最终我们为其取得了田纳西大学健康科学中心的邀请函&…

记模型训练损失为NAN

前段时间想把我模型的输入由DWT子带改为分块的图像块&#xff0c;一顿魔改后&#xff0c;模型跑着跑着损失就朝着奇怪的方向跑去了&#xff1a;要么突然增大&#xff0c;要么变为NAN。 为什么训练损失会突然变为NAN呢&#xff1f;这个作者将模型训练过程中loss为NAN或INF的原因…

数据模型中的“概念模型”、“逻辑模型”、“物理模型”区别

数据模型是数字化应用设计过程中非常重要的技术要素&#xff0c;通过数据模型可以提高企业各方沟通效率&#xff0c;实现数字化项目落地的规范性和架构统一性。 数据模型分为三个层级&#xff0c;抽象程度上由高到低依次是概念数据模型&#xff08;Concept Data Model&#xf…