2下载Spring,第一个Spring程序+引用Log4j2

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/596910.shtml

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

相关文章

3个.NET开源简单易用的任务调度框架

前言 今天分享3个.NET开源、简单、易用的任务调度框架&#xff0c;帮助大家在做定时任务调度框架技术选型的时候有一个参考。 Quartz.Net Quartz.NET是一个功能齐全的开源作业调度系统&#xff0c;可用于从最小的应用程序到大规模企业系统。 Quartz.NetUI Quartz.NetUI是一…

2023年兔飞猛进,2024年龙码精神,龙举云兴

一、2023年回顾 从中华传统文化的角度来看&#xff0c;2023年&#xff0c;是一个比较特别的年份。 2023年是癸卯年&#xff0c;这是根据“天干地支”排列而来。2023年是黑兔年&#xff0c;这是一是根据十天支与五行的对应关系&#xff1a;壬癸属水、代表黑色&#xff0c;二是…

Microsoft Word去除页面多余的换行符

大家写论文的时候或者排版的时候可能遇到换行符多出来了导致页面的不美观。像下面这张图一样&#xff0c;虽然latex不会出现这种问题。 处理方式 点击插入然后点击分页 结果展示

Python最基础的对字符串的操作1

1&#xff0c;字符串的查找&#xff1a; find()&#xff1a;查询某个子串是否包含在这个字符串中&#xff0c;如果在返回这个子串开始的位置下标&#xff0c;否则则返回-1 index()&#xff1a;查询某个子串是否包含在这个字符串中&#xff0c;如果在返回这个子串开始的位置下标…

从vue小白到高手,从一个内容管理网站开始实战开发第六天,登录功能后台功能设计--API项目中的登录实现(一)

从vue小白到高手,从一个内容管理网站开始实战开发第五天,登录功能后台功能设计--数据库与API项目-CSDN博客文章浏览阅读348次,点赞9次,收藏7次。本次文章主要讲了开发后台API项目给前台vue调用的话,需要使用的数据库并新建数据库和表、安装开发工具、如何创建API项目以及A…

IOC解决程序耦合

1.什么是IOC IOC (Inverse of Control)即控制反转&#xff1a;由ioc容器来创建依赖对象&#xff0c;程序只需要从IOC容器获取创建好的对象。 我们在获取对象时&#xff0c;都是采用new的方式。是主动的。 我们获取对象时&#xff0c;同时跟工厂要&#xff0c;有工厂为我们查找…

Impala-查询Kudu表详解(超详细)

文章目录 前言一、使用Impala查询kudu表介绍1. 使用Impala与Kudu表的好处2. 配置Impala以使用Kudu3. Kudu副本因子 二、Impala DDL增强功能1. Kudu表的主键列2. Kudu表特定的列属性1. 主键属性2. NULL | NOT NULL属性3. DEFAULT属性4. ENCODING属性5. COMPRESSION属性6. BLOCK_…

Linux之IP地址、主机名、域名解析

一、IP地址 可以通过ifconfig命令查看本机的ip地址&#xff0c;如果无法使用ifconfig命令&#xff0c;可以安装 安装&#xff1a;yum -y install net-tools ens33&#xff1a;主网卡&#xff0c;里面的inet就是ip地址 lo&#xff1a;本地回环网卡&#xff0c;127.0.0.1&…

Apache Doris (六十): Doris - 物化视图

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录

OpenHarmony—开发环境搭建

背景 因为没有实体的开发硬件&#xff0c;且不想破坏原有的Linux环境&#xff0c;所以这里基于 Docker QEMU 搭建开发环境 宿主机Linux系统命令行方式DockerQEMU 6.2 Docker环境准备 安装Docker 在Ubuntu中&#xff0c;可以使用下面的命令来安装Docker&#xff1a; sudo …

详细解读QLC SSD无效编程问题-4

对于这些全部页面被无效化的WL&#xff0c;执行第二次编程实际上是不必要的&#xff0c;但当前的策略并未注意到这一问题。而对于那些既有有效页面又有无效页面&#xff08;图11中显示为1到3个&#xff09;的WL&#xff0c;应当被编程&#xff0c;但可以利用这些无效信息来改进…

springboot实现用户操作日志记录

springboot实现用户操作日志记录 简介&#xff1a;之前写了《aop实现日志持久化记录》一文&#xff0c;主要介绍自定义aop标注方法上&#xff0c;通过切面方法对用户操作插入mysql。思路正确但是实际操作上存在一些小问题&#xff0c;本文将从项目出发&#xff0c;对细节进行补…

【JaveWeb教程】(2)Web前端基础:JavaScript入门不再难:一篇文章教你轻松搞定JavaScript的基础语法与函数

目录 1 介绍2 引入方式3 基础语法3.1 书写语法3.2 变量3.3 数据类型和运算符 4 函数4.1 第一种定义格式4.2 第二种定义格式 html完成了架子&#xff0c;css做了美化&#xff0c;但是网页是死的&#xff0c;我们需要给他注入灵魂&#xff0c;所以接下来我们需要学习JavaScript&a…

普通用户用哪款电脑杀毒软件最好?

前言 各位小伙伴接触到电脑的时候&#xff0c;都一定有听过“电脑一定要安装杀毒软件”这句话。 毕竟在电脑诞生之初到今天&#xff0c;电脑木马和病毒依旧存在。 中了木马或病毒的电脑会出现什么现象&#xff1f;具体得看中了什么样的病毒。 但轻则资料泄漏、电脑瘫痪&…

SSL/TLS 握手过程详解

SSL握手过程详解 1、SSL/TLS 历史发展2、SSL/TLS握手过程概览2.1、协商交换密码套件和参数2.2、验证一方或双方的身份2.3、创建/交换对称会话密钥 3、TLS 1.2 握手过程详解4、TLS 1.3 握手过程详解5、The TLS 1.2 handshake – Diffie-Hellman Edition 1、SSL/TLS 历史发展 可…

自然语言转SQL,一个微调ChatGPT3.5的实例(下)--模型微调及模型性能

提交训练集进行微调 一旦我们创建了JSONL文件&#xff08;可以在这里或ipfs_here找到一个小样本&#xff09;&#xff0c;下一步是使用以下命令将创建的文件上传到OpenAI&#xff1a; openai.api_key os.getenv("OPENAI_API_KEY") print(openai.File.create(fileo…

【水浸传感器】软硬件一体水浸监测整套方案远程监测解决各种环境漏水问题

一、痛点分析 在工业生产中&#xff0c;水浸传感器可以安装在数据中心、半导体厂房、输油管道、车间仓库、变电室等易发生水浸的区域。一旦检测到漏水情况&#xff0c;立即发出信号反馈。然而&#xff0c;水浸传感器分散在各个地点&#xff0c;导致管理不集中、不便捷&#xf…

Fiber Golang 中的路由和中间件

掌握 GoLang Fiber 中的路由和中间件艺术&#xff0c;以进行高效的 Web 开发 在网络开发领域中&#xff0c;创建一个有效地路由和管理各种任务的 Web 应用程序至关重要。路由决定了如何处理传入的请求&#xff0c;而中间件在执行任务&#xff0c;如身份验证、日志记录和请求解…

力扣刷题-二叉树-最大二叉树

654.最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大…

Dockerfile语法和简单镜像构建

Dockerfile是一个用于定义Docker镜像的文本文件&#xff0c;包含了一系列的指令和参数&#xff0c;用于指示Docker在构建镜像时应该执行哪些操作&#xff0c;例如基于哪个基础镜像、复制哪些文件到镜像中、运行哪些命令等。 Dockerfile文件的内容主要有几个部分组成&#xff0c…