第二章、第一个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. OO第一次大作业

    前言 前言的前言 这是我的第一篇blog,有点小激动,我还找教程设置了一下我的背景,本来还想弄个页面小宠物,但是看了一下感觉有点复杂,下次一定.如果对我blog的内容有任何修正或者建议可以评论让我知道 ...

  2. 简单的python3脚本:从日志中提取信息

    命名:log_extractor.py or download_stats_extractor.py # coding:utf-8 #!/usr/bin/python3 def filter_line ...

  3. KVM 虚拟机 热插拔硬盘

    新建硬盘 lvm 命令 lvcreate -L 200G -n lv02 ssd01 qemu-img 命令 qemu-img create -f raw test1G.raw 1G dd 命令 dd ...

  4. C# LinearGradientBrush使用报错

    今天在学习C#时使用 LinearGradientBrush 属性发生了如上错误,发现引用其时并没有提示 在添加了此命名空间后恢复正常

  5. 层叠样式表(CSS)3

    三.层叠样式表属性 1.文字属性 font-size:字体大小 line-height:行高 font-family:字体 font-weight:粗细程度 .......等等很多,可自行学习 2.文 ...

  6. TFS 更换电脑名称后映射失效

    TFS 更换电脑名称后映射失效 建议不要随便更改电脑名 环境 Visual Studio 2019 : Win10 操作步骤 查找 TFS 的相关配置文件.如果你知道你之前的电脑名字可以跳过这一步:如 ...

  7. Postgresql: 常用配置

    允许远程链接postgresql 要允许 PostgreSQL 数据库允许远程连接,需要进行以下配置步骤: 打开 PostgreSQL 的主配置文件 postgresql.conf.通常,该文件位于以 ...

  8. JDV背后的技术-助力618

    一.项目介绍 JDV(可视化大屏)是京东内部搭建可视化大屏的数据工具平台,内置10+种模版特效,40+种风格各异的图表.导航等组件.与集团其他数据工具打通,支持一站式.自助化.拖拽式搭建大屏,实现数据 ...

  9. 基于Linux的三种防火墙(IPtables、Firewall、UFW)

    学而不思则罔,思而不学则殆. 导航 IPtables Firewall UFW 对比总结 IPtables部分 1.IPtables 四表五链. 四表:filter.nat.raw.mangle. 五 ...

  10. linux 查找目录中的大文件

    find是Linux系统中常用的文件查找命令.它可以在文件系统中查找指定条件的文件,并执行相应的操作.语法格式如下: find [pathname] [options] pathname: 指定查找的 ...