首页 > 编程语言 >Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)

Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)

时间:2023-11-14 10:57:30浏览次数:38  
标签:ApplicationContext 配置文件 Spring id 日志 随笔 log4j Spring5

学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】

第二章、第一个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
      

标签:ApplicationContext,配置文件,Spring,id,日志,随笔,log4j,Spring5
From: https://www.cnblogs.com/eyewink/p/17831102.html

相关文章

  • linux设置定时清理日志文件脚本
    前言当我们在生产过程中,都会遇到诸如此类的问题。定时清理日志成为了必不可少的一步骤!一.定时清理简述当我们要定期的备份以及删除时,我们需要写一个shell 脚本,然后用 crontab 来每天定期执行。二.定时脚本编写find对应目录-mtime+天数-name"文件名"-execrm-rf{}......
  • 随笔-Centos7 install systemtap
    SystemTapBeginnersGuideChapter2.UsingSystemTapThischapterinstructsusershowtoinstallSystemTap,andprovidesanintroductiononhowtorunSystemTapscripts.2.1.InstallationandSetupTodeploySystemTap,SystemTappackagesalongwiththeco......
  • 学习随笔(设计模式:面向对象原则)
    内容今天学习了面向对象的几种设计思想原则,之前一直是C开发,所以面向过程的思想比较严重。面向对象的四个好处:可维护好、可拓展性好、可复用性好、灵活性好。收获1.单一职责原则:封装一个类,职责应该单一,仅有一个以其它变换的原因,所以要做好类的职责分离。2.开放-封闭原则:软件实......
  • 每日随笔——适配器模式
    [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1.画出对应的类图;2.提交源代码;3.注意编程规范。类图 源码:Catpackagesc8;publicinterfacecat{voidcatchMouse();voidcry();}Dogpackagesc8;publicinter......
  • 连载随笔:VBA工具No.2:APOX输入数据辅助制作工具
     一、需求背景        2009年,3G(TD-SCDMA)工程大规模上线,无线网络规划工程师在进行TD-SCDMA无线网络仿真工作中,经常为制作APOX(中国移动设计院的3G仿真软件)仿真输入数据伤浪费了宝贵的时间。    通过APOX输入数据辅助制作工具工具可快速实现仿真输入数据格......
  • 连载随笔:第一个VBA工具的诞生-站间距计算工具(二)
    四、工具打磨     2008年,结合大家的使用反馈,我不断地修改BUG,调整适用功能,到2008年6月16日发布了V2.4版本。      V2.4版本还增加了3种输出格式。     2008年我到了南昌,由于工作负荷的增加,VBA编程就偃旗息鼓了一段时间。2013年的时候,由于4G(TD-L......
  • 新随笔
    CSPT4想出不难。调了一会儿。做出的题还是必须对拍,输不起。线性基query正确写法x=max(x,x^b[i]),if(!(x>>i&1))x^=b[i];常数巨大。集合B中选两数,线性基A中选任意个数:用A消掉B中数的对应位,这样对B'而言,选全A中数一定最优,在B'中trie求两数最大异或和即可。......
  • filebeat收集k8s日志
    配置文件介绍filebeat.inputs:-type:log#开启filebeat采集软连接的文件symlinks:true#给当前的输入类型打上标签tags:["kube-system"]#自定义字段fields:namespace:"kube-system"#是否将自定义字段设置为一级模式fields_under_root:truep......
  • 博客园发布随笔发布成功后自己能看到 别人那里却显示处于隐藏状态怎么解决
    如果在博客园发布随笔后,你能看到但其他人却显示为隐藏状态,可能存在以下解决方法:检查隐私设置:登录到博客园,并访问个人设置页面。确认你的随笔的隐私设置是公开或对所有人可见,而不是仅限自己或部分访问权限。检查编辑模式:确保你在发布随笔时没有选择草稿或私密模式。有时候误......
  • 随笔 复习 连接池 线程池
    连接池实现思路classConnectPool{public:ConnectPool(intnumber){for(inti=0;i<=number;i++){intfd=socket(); //创建通信的fdconect(); //连接服务器m_list.push(fd);//往容器中存储链接......