2.1、环境要求

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

  • Maven:3.6+

  • Spring:6.0.2

    spring6要求jdk17版本,不然会爆错。

以下内容以spring5版本为案例

2.2、构建模块

(1)构建父模块spring6

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

点击“Create”

删除src目录

(2)构建子模块spring6-first

点击 Create 完成

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>5.3.12</version></dependency><!--junit5测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.3.1</version></dependency></dependencies>

查看依赖:

2.3.2、创建java类

package org.example.bean;public class User {public void add(){System.out.println("add....");}
}

2.3.3、创建配置文件

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

<?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"><!--配置User所对应的bean,即将User的对象交给Spring的IOC容器管理通过bean标签配置IOC容器所管理的bean属性:id:设置bean的唯一标识class:设置bean所对应类型的全类名--><bean id="user" class="org.example.bean.User"></bean></beans>

2.3.4、创建测试类测试

import org.example.bean.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestBean {@Testpublic void testUserObject(){ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");User user = (User) context.getBean("user");user.add();}
}

2.3.5、运行测试程序

2.4、程序分析

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

修改HelloWorld类:

package org.example.bean;public class User {public User(){System.out.println("无参数构造方法执行。。。");}public void add(){System.out.println("add....");}
}

执行结果:

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

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

// dom4j解析beans.xml文件,从中获取class属性值,类的全类名
// 通过反射机制调用无参数构造方法创建对象
Class clazz = Class.forName("org.example.bean.User");
//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、测试

运行原测试程序

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

2.5.5、使用日志

import org.example.bean.User;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestUser {private Logger logger = LoggerFactory.getLogger(TestUser.class);@Testpublic void testUserObject(){ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");User user = (User) context.getBean("user");logger.info(user.toString());logger.info("成功");user.add();}
}

控制台:

【Spring教程】2.spring入门相关推荐

  1. Spring教程 - Spring核心框架教程

    Spring教程 - Spring核心框架教程 Spring是最广泛使用的Java EE框架之一.我已经在Spring Tutorial上写了很多内容,这是一篇摘要文章,它将作为索引按顺序完成所有这些 ...

  2. Spring Boot 2.x基础教程:快速入门

    点击蓝色"程序猿DD"关注我哟 来源:http://t./ <Star最多的Spring Boot教程继续更新了> 牛皮吹过了! Git仓库和博客专题页也改版完成! 是 ...

  3. spring cloud入门_Spring Boot 2.x基础教程:快速入门

    简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot ...

  4. 【Spring】Spring教程入门到精通

    文章目录 1.前言 2.Spring 2.1 Spring的优点 2.2 Spring下载配置 3.IOC 3.1 IOC的处理过程 3.2 IOC底层原理 3.3 IOC接口 3.4 IOC操作Be ...

  5. 【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)

    系列文章目录 [spring authorization server系列教程](一)入门系列,快速构建一个授权服务器 文章目录 系列文章目录 前言 一.目前已实现的功能 二.入门,一步一步快速开始构 ...

  6. boot入门思想 spring_什么是Spring boot?Spring Boot快速入门以及Spring Boot实例教程

    转自:http://www.jianshu.com/p/d24bceea7665 简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候, ...

  7. 【一篇入魂】带你快速起跑spring,最详细入门教程

    一.spring简介 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身. 它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(A ...

  8. Spring Boot【快速入门】

    Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point for building all Sp ...

  9. 如何:从Spring 4.0快速入门以构建简单的REST-Like API(演练)

    如何:从Spring 4.0快速入门以构建简单的REST-Like API(演练) 关于使用Spring MVC创建Web API的另一篇教程. 不太复杂. 只是一个演练. 生成的应用程序将提供简单的 ...

  10. Spring Cloud 极简入门

    专栏亮点 优势 内容通俗易懂,更适合初学者. 重实操性,专栏包含一个完整的项目实战,通过开发项目掌握技术的实际应用. 案例理论结合,专栏以实际案例为主,更有利于上手应用. 专栏特色 从零讲起,轻松入门 ...

最新文章

  1. SDNU 1464.最大最小公倍数(思维)
  2. 性能相差极大的SQL语句
  3. ASP.NET Core开发者成长路线图
  4. java session使用_Java互联网架构-高负载集群架构如何解决session一致性问题
  5. textarea输入中文和数字换行解决方法
  6. 【译】适合dba和开发者的mysql最佳实践
  7. [翻译svg教程]Path元素 svg中最神奇的元素!
  8. # 8.19考试总结
  9. 最新服务器处理器天梯,2019服务器CPU天梯图之性能排行榜(双路三路四路) - 服务器百科...
  10. Python快速判断素数方法
  11. InSAR数据处理软件简介
  12. opencv c++ 检测红色HSV 和RGB
  13. 【Linux】shell脚本实战-使用shell进行数学运算
  14. Typescript浅尝
  15. rgw bucket reshard流程
  16. UWB定位技术芯片有什么用
  17. 高防服务器防御的原理是什么
  18. 【逆向分析】星际争霸1998 - 绕过密码验证
  19. 【收藏级】88条关于OpenStack命令的手册(常看常新)
  20. 懒人外贸工具 外贸批量远程工具

热门文章

  1. YumRepo Error: All mirror URLs are not using ftp, http[s] or file解决办法
  2. 【魔兽世界】-逍遥魔兽V837-单体可用背包自动整理插件
  3. 耳机声音一边大一边小
  4. NOIP普及组历届真题(1997~2018)
  5. /dev/null 21 详解
  6. 通达信 c java,通达信的c
  7. ui设计概念是什么?ui设计包括哪些设计?
  8. 二本大龄程序员居然拿到百度offer(百度面经)
  9. 解决IIS+PHP出现的“500 - 内部服务器错误”
  10. 通过ch.ethz.ssh2.Connection无法连接主机解决方法