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
相关推荐
一嘴一个橘子12 分钟前
mybatis - 动态语句、批量注册mapper、分页插件
java
组合缺一13 分钟前
Json Dom 怎么玩转?
java·json·dom·snack4
REDcker17 分钟前
RESTful API设计规范详解
服务器·后端·接口·api·restful·博客·后端开发
危险、29 分钟前
一套提升 Spring Boot 项目的高并发、高可用能力的 Cursor 专用提示词
java·spring boot·提示词
kaico201833 分钟前
JDK11新特性
java
钊兵34 分钟前
java实现GeoJSON地理信息对经纬度点的匹配
java·开发语言
jiayong2338 分钟前
Tomcat性能优化面试题
java·性能优化·tomcat
秋刀鱼程序编程42 分钟前
Java基础入门(五)----面向对象(上)
java·开发语言
纪莫1 小时前
技术面:MySQL篇(InnoDB的锁机制)
java·数据库·java面试⑧股
Remember_9931 小时前
【LeetCode精选算法】滑动窗口专题二
java·开发语言·数据结构·算法·leetcode