Spring5学习随笔-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的依赖

    xml 复制代码
    <!-- 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

java 复制代码
//1.获取Spring的工厂
ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
//2 通过工厂类获取对象
Person person = (Person) context.getBean("person");

5.细节分析

  • 名此解释

    Spring工厂创建的对象叫做bean

  • Spring工厂的相关方法

    java 复制代码
    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.代码

    java 复制代码
    //用于判断是否存在指定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

      xml 复制代码
      <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

      bash 复制代码
      # 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
相关推荐
IT毕设实战小研3 分钟前
基于大数据的跨国外派人员适应满意度与留存影响因素可视化分析
android·java·大数据·python·django·课程设计
letisgo57 分钟前
JAVA 高级进阶10篇《消息队列实战:RocketMQ/Kafka选型与“不丢不重有序“三连解》
java·面试·kafka·消息队列·rocketmq
2401_8504811712 分钟前
UVA101
java
平头哥AI18 分钟前
Day 21 _ error 是个普通值_errors.New 与 fmt.Errorf 造出来,沿调用栈抛到 main 接住
后端·学习·golang·go
Lyyaoo.22 分钟前
【回溯】【中等】全排列
java·数据结构·算法
xixingzhe222 分钟前
spring boot对接Dify
java·spring boot·dify
数据狐(Datafox)24 分钟前
京东商品详情API接口解析(附 JSON 样例)
java·开发语言·json
写后端的胖头鱼26 分钟前
一文讲懂JVM与调优
jvm·后端·算法·架构·jvm调优
步行cgn27 分钟前
Spring Boot 指定数据来源详解
spring boot·后端·python
Wang's Blog29 分钟前
Java框架快速入门: Spring Security+OAuth2之深度定制UserDetailsService与密码无缝升级
java·开发语言·spring