第二章、第一个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的第一个程序(环境搭建、日志框架整合)的更多相关文章

  1. Java开发学习心得(一):SSM环境搭建

    目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...

  2. Python学习第一弹——Python环境搭建

    一.Python简介: Python,是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具有 ...

  3. Python学习笔记 (1)Hello World(环境搭建+输出Hello World!)

    随想 高考发挥失常.科三遇火车发挥失常,各种不顺……突然发现假期都快没了,才想起高考前想象的这个假期要做的一堆事,现在来多完成一件吧. 这几篇博客仅只是我的学习笔记,凑合看吧.我这个python小白看 ...

  4. 《精通并发与Netty》学习笔记(01 - netty介绍及环境搭建)

    一.Netty介绍     Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.     ...

  5. 跟哥一起学python(2)- 运行第一个python程序&环境搭建

    本节的任务,是完成我们的第一个python程序,并搭建好学习python的环境.  建议通过视频来学习本节内容: 查看本节视频 再次看看上一节提到的那张图,看看作为高级编程语言,我们如何编程. 首先, ...

  6. JavaSE 学习笔记01丨开发前言与环境搭建、基础语法

    本蒟蒻学习过C/C++的语法,故在学习Java的过程中,会关注于C++与Java的区别.开发前言部分,看了苏星河教程中的操作步骤.而后,主要阅读了<Java核心技术 卷1 基础知识>(第8 ...

  7. FFMPEG高级编程第一篇:环境搭建及编译

    前段时间在翻看电脑里面资料时,发现了以前做的在嵌入式硬件上面运行以ffmepg为基础,以嵌入式硬件解码的多媒体播放工作,发现都快忘记完了.今日得闲整理温习了一下ffmpeg在嵌入式上的运用,这里给大家 ...

  8. 【Java学习系列】第1课--Java环境搭建和demo运行

    本文地址 分享提纲: 1. java环境的搭建 2. java demo代码运行 3.参考文档 本人是PHP开发者,一直感觉Java才是程序的王道(应用广,科班出身),所以终于下决心跟一跟. 主要是给 ...

  9. 【Spring学习笔记-1】Myeclipse下Spring环境搭建

    *.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...

  10. 【菜鸟学习Linux】-第三章- Linux环境搭建-使用VMware9安装Ubuntu 12.04系统

    上一步,我们安装了VMware9虚拟机,现在我们就是用它来安装Ubuntu12.04系统,至于Ubuntu是什么,我就不废话了,大家google一下,比我讲的清楚,好了,开始干活! Ubuntu官网下 ...

随机推荐

  1. pip install mysqlclient命令安装mysqlclient失败的解决办法

    错误情况: 解决方法: 到这个地址下载自己版本对应的资源 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 如下图: 我这里首先下载了  ...

  2. 使用 vscode 远程登陆自己的电脑/服务器 (不需要内网穿透 😇)

    问题背景 最近有远程调试的需求,从笔记本连入配置比较高的电脑(windows)运行代码,查阅资料后,了解到大致就是两个方法: 共享屏幕远程控制,如 to desk, 向日葵 内网穿透 + ssh 第一 ...

  3. Linux 概念:grub2

    GRUB 2是许多发行版的缺省efi模式引导加载程序. grub2 与 grub 的区别 官方手册:https://www.gnu.org/software/grub/manual/grub/html ...

  4. Linux系统文件(万物皆文件)

    -bin :基础命令文件,为usr下的bin文件连接 -boot :启动文件 -dev :device 设备目录  各种硬件设备都会映射成文件 -etc :系统管理的配置文件,和一些数据库文件 -ho ...

  5. 【go语言】2.4.3 Go Modules

    Go Modules 是 Go 语言的官方依赖管理工具,自 Go 1.11 版本开始引入.它解决了 Go 语言在依赖管理上的一些问题,如版本控制.依赖隔离等. 初始化一个新的模块 你可以使用 go m ...

  6. 解决win10/ubuntu端口占用问题

    win10解决方案 首先打开cmd命令行 命令行里输入 netstat -ano|findstr 被占用端口号 然后可以看到占用该端口号的pid 输入taskkill -f -pid pid号即可 u ...

  7. 【技术实战】Vue功能样式实战【六】

    需求实战一 样式展示 代码展示 <template> <ARow> <ACol style="background-color:#F1F4F5 "&g ...

  8. SpringBoot3安全管理

    目录 一.简介 二.工程搭建 1.工程结构 2.依赖管理 三.配置管理 1.核心配置类 2.认证数据源 3.认证流程 4.身份过滤器 四.核心功能 1.登录退出 2.权限校验 五.参考源码 标签:Se ...

  9. codeforces600E. Lomsat gelral(dsu on tree笔记)

    知识前驱:树链剖分 codeforces600E. Lomsat gelral 题意:给出一个树,求出每个节点的子树中出现次数最多的颜色的编号和 分析:递归求解,对于一棵树,求出他的所有子树的颜色编号 ...

  10. ptp 时钟同步

    转载请注明出处: PTP(Precision Time Protocol)的功能可以帮助实现网络中各个节点的时钟同步,以提供更精确的时间参考. 作用: 时钟同步:通过PTP协议,在网络中不同节点之间实 ...