Spring5深入浅出篇:Spring工厂简单原理以及日志应用

Spring5深入浅出篇:Spring工厂简单原理以及日志应用

Spring⼯⼚的底层实现原理(简易版)

还是通过分析第一个Spring程序来展开说说Spring工厂的简单原理

首先创建实体类

package com.baizhiedu.basic;import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;// new Person() 通过工厂
public class Person {private Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Person() {}@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +'}';}
}

然后在Spring配置文件中配置bean(applicationContext.xml)

 <bean id="person" class="com.baizhiedu.basic.Person"/>

然后编写测试类

   /***  用于测试:用于测试Spring的第一个程序*/@Testpublic void test3() {//1 获得Spring的工厂ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");//2 通过工厂类 获得 对象Person person = (Person) ctx.getBean("person");System.out.println("person = " + person);}

因为我们是通过测试类使用Spring工厂的,所以我们也从测试类开始进行分析.

  • 首先通过ApplicationContext工厂读取配置文件applicationContex.xml
  • 获取bean标签的相关信息 如 id = person ,class的值 = com.baizhiedu.basic.Person
  • 通过反射来创建对象
Class<?> clazz = Class.forName(class的值);
id的值 = clazz.newInstance();
  • 反射创建对象底层也是会调用对象自己的构造方法
Class<?> clazz = Class.forName(class的值);
id的值 = clazz.newInstance();等效于(注意这里使用的是等效)
Account account = new Account()

对象创建的问题

问题:未来在开发过程中,是不是所有的对象,都会交给Spring⼯⼚来创建呢?回答:理论上 是的,但是有特例 :实体对象(entity)是不会交给Spring创建,它是由持久层框架进⾏创建。

Spring5.x与⽇志框架的整合

Spring与⽇志框架进⾏整合,⽇志框架就可以在控制台中,输出Spring框架运⾏过程中的⼀些
重要的信息。
好处:便于了解Spring框架的运⾏过程,利于程序的调试
  • Spring如何整合⽇志框架
默认Spring1.2.3早期都是于commons-logging.jarSpring5.x默认整合的⽇志框架 logback log4j2
Spring5.x整合log4j1. 引⼊log4j jar包2. 引⼊log4.properties配置⽂件
  • 引入依赖到pom.xml
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version>
</dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
  • 新建log4j.properties配置文件配置日志输出
# resources # resources⽂件夹根⽬录下
### ### 配置根
log4j.rootLogger = debug,console
### ### ⽇志输出到控制台显示
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd
HH:mm:ss} %-5p %c{1}:%L - %m%n

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

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

相关文章

Docker(二)安装指南:主要介绍在 Linux 、Windows 10 和 macOS 上的安装

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 安装 Docker Docker 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境下的 安装指南&#xff0c;这里主要介绍 Docker 在…

Spring 注解 @Transactiona

Transactional 是什么 Transactional 是一个用于声明事务性操作的注解&#xff0c;通常用于 Java 编程语言中的 Spring 框架中。这个注解被用来标记一个方法或类需要被事务管理器事务化的地方。 在 Spring 中&#xff0c;事务是用于管理数据库操作的机制&#xff0c;确保一系…

DAZ to maxon 实时面捕52个blendshapes 表情模板基本形中英文对照表

一、转自&#xff1a; DAZ to maxon 实时面捕52个blendshapes 表情模板基本形中英文对照表 - 哔哩哔哩 很多学员反映实时表情怎么就不同步呢&#xff1f;这个问题其实很常见。 第一&#xff1a;表情模板的顺序弄错&#xff0c;导致表情错乱。 第二&#xff1a;表情模板不标准…

leetcode—和为K的子数组

1 和为K的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1…

AbstractHttpMessageConverter + easyexcell优雅下载附件

介绍 AbstractHttpMessageConverter 是 Spring 框架中用于处理 HTTP 消息转换的抽象基类。它用于处理来自 HTTP 请求的消息,并将其转换为特定的 Java 对象,或者将 Java 对象转换为 HTTP 响应消息。 这个抽象类允许开发人员创建自定义的 HTTP 消息转换器,以便在 Spring MVC…

职务岗位的概念澄清及应用

背景 现在的企业数字化平台中&#xff0c;有一些术语组织管理中的术语&#xff0c;理解上很有歧义&#xff0c;并且命名和应用上简直五花八门&#xff0c;洋相百出&#xff0c;比如&#xff0c;我们的大厂&#xff0c;就把角色这次&#xff0c;可以作为分类、分组的标签就能大…

2024-01-15(SpringMVCMybatis)

1.拦截器&#xff1a;如果我们想在多个handler方法(controller中的方法)执行之前或者之后都进行一些处理&#xff0c;甚至某些情况下需要拦截掉&#xff0c;不让handler方法执行&#xff0c;那么就可以使用SpringMVC为我们提供的拦截器。 拦截器和过滤器的区别&#xff1a;过滤…

基于内容的图像web检索系统

题目&#xff1a;基于内容的图像在线检索系统 简介&#xff1a;基于内容的图像在线检索系统&#xff08;Content Based Online Image Retrieval , 以下简称 CBOIR&#xff09;&#xff0c;是计算机视觉领域中关注大规模数字图像内容检索的研究分支。典型的CBOIR系统&#xff…

分布式事务Seata实战-AT模式(注册中心为Eureka)

大致记录Seata的AT模式下创建项目过程中需要注意的点和可能遇到的问题。 本项目是以官网的给的示例&#xff08;即下图&#xff09;进行创建的&#xff0c;以Eureka为注册中心。 官网&#xff1a;Seata AT 模式 | Apache Seata™ 官方代码示例&#xff1a; 快速启动 | Apac…

算法笔记(动态规划入门题)

1.找零钱 int coinChange(int* coins, int coinsSize, int amount) {int dp[amount 1];memset(dp,-1,sizeof(dp));dp[0] 0;for (int i 1; i < amount; i)for (int j 0; j < coinsSize; j)if (coins[j] < i && dp[i - coins[j]] ! -1)if (dp[i] -1 || dp[…

Doris配置外表以及多个Hive外表的配置

1.场景分析 以Clickhouse、Doris、Starrocks等为代表的mpp分析数据库正在快速的兴起&#xff0c;以其高效查询、跨库整合能力收到广大技术人员的喜爱。本文主要浅显介绍下作者在使用Doris时&#xff0c;通过建立catlog进行跨库查询。 废话不多少&#xff0c;直接上代码 2.相关…

力扣211. 添加与搜索单词 - 数据结构设计

字典树 思路&#xff1a; 设计一棵字典树&#xff0c;每个节点存放单词的一个字符&#xff0c;节点放一个标记位&#xff0c;如果是单词结束则标记&#xff1b;字典树插入&#xff1a; 字典树默认有 26 个 slot 槽代表 a - z&#xff1b;遍历单词&#xff0c;如果字符对应槽存…

哥德巴赫猜想不成立

哥德巴赫猜想是德国人哥德巴赫与瑞士人欧拉联手提出的素数与合数关系猜想&#xff1a;≥2的偶数素数素数。后来黎曼崛起&#xff0c;他把1剔除出素数队列&#xff0c;哥猜被整理为&#xff1a;≥6的偶数素数素数&#xff0c;≥9的奇数素数素数素数。 哥猜虽然是欧洲人的课题&am…

Python自动化实战之接口请求的实现

在前文说过&#xff0c;如果想要更好的做接口测试&#xff0c;我们要利用自己的代码基础与代码优势&#xff0c;所以该章节不会再介绍商业化的、通用的接口测试工具&#xff0c;重点介绍如何通过 python 编码来实现我们的接口测试以及通过 Pycharm 的实际应用编写一个简单接口测…

Redis应用(三)实现自动补全

自动补全往往给出部分提示供用户选择&#xff0c;这就涉及排序。有几下几种方法&#xff1a; 一、需要添加元素且数据量少 1、方案&#xff1a;数据量非常小时&#xff0c;程序从redis中获取数据后&#xff0c;在程序中排序。 &#xff08;1&#xff09;写数据&#xff1a;如…

『Open3D』1.10 Tensor数据处理

open3d中实现了自身的数据类型,用于open3d中内部算法的数值计算,但基础使用上与numpy类似。 目录 1、tensor创建 2、tensor数据属性 3、 Tensor数据在CPU与GPU上的转换

Linux/Traceback

Enumeration nmap 使用nmap初步扫描发现只开放了22和80端口&#xff0c;端口详细扫描情况如下 先看看web是什么样子的&#xff0c;打开网站发现有一条留言&#xff0c;显示该站点已经被黑了&#xff0c; 并且留下了后门 查看源代码&#xff0c;可以看到下面的注释 <!--So…

Docker中创建并配置MySQL、nginx、redis等容器

Docker中安装并配置MySQL、nginx、redis等 文章目录 Docker中安装并配置MySQL、nginx、redis等一、创建nginx容器①&#xff1a;拉取镜像②&#xff1a;运行nginx镜像③&#xff1a;从nginx容器中映射nginx配置文件到本地④&#xff1a;重启nginx并重新配置nginx的挂载 二、创建…

python编写的端口扫描脚本

实训项目制作的端口扫描脚本 附有详细的使用命令解释 可以实现单个端口进行扫描和端进行扫描 eg&#xff1a;1-65535 import optparse # 导入用于解析命令行参数的模块 import socket # 导入用于网络通信的模块 # 定义函数&#xff1a;扫描指定主机的指定端口 def PortSca…

Vue透传 Attributes的代码以及总结

//透传简单来说就是在子组件写style,class或者函数可以将它们&#xff0c;自动直接传递给 template&#xff1a;里面的单个节点。 //多个节点透传的自动传递会生效&#xff0c;如果在节点中像使用&#xff0c;那么就需要在对应的节点中写像:style"$attrs.style"的形…