Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)
第二章、第一个Spring程序
1.软件版本
1.JDK1.8+
2.Maven3.5+
3.IDEA2018+
4.SpringFramework 5.1.4
官网:www.spring.io
2.环境搭建
Spring的jar包
1.设置pom的依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
Spring的配置文件
1.配置文件的放置位置:任意位置 没有硬性要求
2.配置文件的命名:没有硬性要求 建议 applicationContext.xml
思考:日后应用Spring框架时,需要进行配置文件路径的位置。

3.Spring的核心API
ApplicationContext
作用:Spring提供的ApplicationContext这个工厂,用于对象的创建
好处:解耦合
ApplicationContext接口类型
接口:屏蔽实现的差异
非web环境:ClassPathXmlApplicationContext(例如:main junit)
web环境:XmlWebApplicationContext

可以看到ApplicationContext就是一个接口
重量级资源(对象占用内存多就是重量级资源。)
1.ApplicationContext工厂的对象占用大量内存(指的是下面的实现类)
2.不会频繁的创建对象:一个应用程序只会创建一个工厂对象
3.ApplicationContext工厂:一定是线程安全的(多线程并发访问)
4.程序开发
spring开发的4个步骤
1.创建类型
2.配置文件的配置 applicationContext.xml
<bean id="person" class="com.baizhi.basic.Person"/>
3.通过工厂类 获得对象
ApplicationContext | ClassPathXmlApplicationContext
//1.获取Spring的工厂
ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
//2 通过工厂类获取对象
Person person = (Person) context.getBean("person");
5.细节分析
名此解释
Spring工厂创建的对象叫做bean
Spring工厂的相关方法
Person person = context.getBean("person", Person.class);
System.out.println("person = " + person); 当前Spring的配置文件中只能有一个<bean class是Person类型
Person person = context.getBean(Person.class);
System.out.println("person = " + person); 获取的是 Spring工厂配置文件中所有bean标签的id值 person person1...
String[] beanDefinitionNames = context.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
System.out.println(beanDefinitionName);
} //根据类型获取Spring配置文件中对应的id值
String[] beanNamesForType = context.getBeanNamesForType(Person.class);
for (String s : beanNamesForType) {
System.out.println(s);
}
//用于判断是否存在指定id值的bean
System.out.println(context.containsBeanDefinition("person")); //用于判断是否存在指定id值的bean
System.out.println(context.containsBean("person"));
配置文件
1.只配置class属性
上述这种配置 有默认id值:com.baizhi.basic.Person#0
应用场景:如果这个bean只需要使用一次,那么就可以省略id
如果这个bean使用多次,则需要设置id值
2.name属性
作用:用于在Spring的配置文件中,为bean对象定义别名
相同:
context.getBean("name|id");区别:
1.别名可以定义多个,但是id属性只能有一个值
2.XML的id属性的值,命名要求:必须以字母开头,字母 数字 下划线 连字符 不能以特殊字符开头
name属性的值,命名没有要求 命名灵活
XML发展到了今天:id属性的限制不存在了
3.代码
//用于判断是否存在指定id值的bean,不能判断name值
System.out.println(context.containsBeanDefinition("p")); //用于判断是否存在指定id值以及name值的bean
System.out.println(context.containsBean("p"));
6.Spring工厂的底层实现原理(简易版)
“Spring工厂是可以调用对象私有的构造方法创建对象” 这就是比 new 创建对象 强大的地方

Spring的运行原理/机制
7.思考
问题:未来在开发过程中,是不是所有的对象,都会交给Spring工厂来创建呢?
回答:理论上 是的,但是有特例:实体对象(entity)是不会交给Spring创建的,它是由持久层框架进行创建,因为它需要数据,数据来源于数据库,而Spring没有数据。
第三章、5.x与日志框架的整合
Spring与日志框架进行整合,日志框架就可以在控制台中,输出Spring框架运行过程中的一些重要的信息
好处:便于了解Spring框架的运行过程,有利于程序的调试
Spring如何整合日志框架
默认
Spring1,2,3早期都是于commons-logging.jar 整合的日志框架
Spring5.x默认整合的日志框架 logback log4j2
Spring5.x整合log4j
1.引入log4j jar包
2.引入log4.properties配置文件
pom
<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文件夹根目录下
## 配置根
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
Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)的更多相关文章
- Java开发学习心得(一):SSM环境搭建
目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...
- Python学习第一弹——Python环境搭建
一.Python简介: Python,是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具有 ...
- Python学习笔记 (1)Hello World(环境搭建+输出Hello World!)
随想 高考发挥失常.科三遇火车发挥失常,各种不顺……突然发现假期都快没了,才想起高考前想象的这个假期要做的一堆事,现在来多完成一件吧. 这几篇博客仅只是我的学习笔记,凑合看吧.我这个python小白看 ...
- 《精通并发与Netty》学习笔记(01 - netty介绍及环境搭建)
一.Netty介绍 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. ...
- 跟哥一起学python(2)- 运行第一个python程序&环境搭建
本节的任务,是完成我们的第一个python程序,并搭建好学习python的环境. 建议通过视频来学习本节内容: 查看本节视频 再次看看上一节提到的那张图,看看作为高级编程语言,我们如何编程. 首先, ...
- JavaSE 学习笔记01丨开发前言与环境搭建、基础语法
本蒟蒻学习过C/C++的语法,故在学习Java的过程中,会关注于C++与Java的区别.开发前言部分,看了苏星河教程中的操作步骤.而后,主要阅读了<Java核心技术 卷1 基础知识>(第8 ...
- FFMPEG高级编程第一篇:环境搭建及编译
前段时间在翻看电脑里面资料时,发现了以前做的在嵌入式硬件上面运行以ffmepg为基础,以嵌入式硬件解码的多媒体播放工作,发现都快忘记完了.今日得闲整理温习了一下ffmpeg在嵌入式上的运用,这里给大家 ...
- 【Java学习系列】第1课--Java环境搭建和demo运行
本文地址 分享提纲: 1. java环境的搭建 2. java demo代码运行 3.参考文档 本人是PHP开发者,一直感觉Java才是程序的王道(应用广,科班出身),所以终于下决心跟一跟. 主要是给 ...
- 【Spring学习笔记-1】Myeclipse下Spring环境搭建
*.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...
- 【菜鸟学习Linux】-第三章- Linux环境搭建-使用VMware9安装Ubuntu 12.04系统
上一步,我们安装了VMware9虚拟机,现在我们就是用它来安装Ubuntu12.04系统,至于Ubuntu是什么,我就不废话了,大家google一下,比我讲的清楚,好了,开始干活! Ubuntu官网下 ...
随机推荐
- 提示工程101|与 AI 交谈的技巧和艺术
随着 ChatGPT 的问世,人工智能(AI)新时代也正式开启.ChatGPT 是一种语言模型.它与用户进行对话交互,以便用户输入问题或提示,模型响应,然后对话可以继续来回进行,类似于在消息传递应用程 ...
- SSH远程主机执行命令:s2c
#!/bin/bash ip=$1 ip_num=$(echo $ip | awk -F\. '{print NF}') if [ $ip_num -eq 2 ]; then ip=192.168.$ ...
- 洛谷 P1336 最佳课题选择 题解
P1336 最佳课题选择 题解 状态:考虑\(f_{i,j}\)表示前\(i\)种论文里面,一共写了\(j\)篇,的最少花费时间. 转移策略:我们一次考虑每一种论文写多少篇.假设写\(k\)篇,\(k ...
- go-zero 是如何做路由管理的?
原文链接: go-zero 是如何做路由管理的? go-zero 是一个微服务框架,包含了 web 和 rpc 两大部分. 而对于 web 框架来说,路由管理是必不可少的一部分,那么本文就来探讨一下 ...
- Java安全之Webshell免杀
Java安全之Webshell免杀 当遇到文件上传时,如果网站存在查杀软件,我们上传的一句话木马会被直接秒杀,这时候就需要做一下免杀,绕过查杀软件的检测. 思路 我的想法是先拆分,然后分别检验那些语句 ...
- C#利用Refit实现JWT自动续期
前言 笔者之前开发过一套C/S架构的桌面应用,采用了JWT作为用户的登录认证和授权.遇到的唯一问题就是JWT过期了该怎么办?设想当一个用户正在进行业务操作,突然因为Token过期失效,莫名其妙地跳转到 ...
- php-fpm的配置
pass 对应的php-fpm socket,这样nginx就能将请求转发给php-fpm,这个的实现真的是精彩,为什么,因为php-fpm是负责管理多个php进程的,他的稳定性令人赞叹. index ...
- Java读取某个文件夹下的所有文件(支持多级文件夹)
源码如下: package com.vocy.water.batch; import java.io.FileNotFoundException; import java.io.IOException ...
- Web应用防火墙--规则防护
一.什么是Web应用防火墙? Web应用防火墙对网站.APP的业务流量安全及合规性保护,对业务流量的识别恶意特征提取.分析识别出恶意流量并进行处理, 将正常安全的流量回源到业务服务器, 保护网站核心业 ...
- 在 Net7.0环境下测试了 Assembly.Load、Assmebly.LoadFile和Assembly.LoadFrom的区别
一.简介 很长时间没有关注一些C#技术细节了,主要在研究微服务.容器.云原生.编批等高大上的主题了,最近在写一些框架的时候,遇到了一些和在 Net Framework 框架下不一样的情况,当然了,我今 ...