Sping6 笔记(一)【优秀的轻量级框架】

Spring6 介绍:

  • 发布时间:2022年11月
  • Spring 框架是一款优秀的轻量级开源框架,为了解决企业应用开发的复杂性而出现
  • Spring 框架的用途:服务器端的开发
  • 特点:简单性、可测试性、松耦合性

学习 Spring6 的前置知识:

  • Java 基础知识(反射)
  • Java 注解
  • XML
  • Maven

一、Spring 概述

1.1 Spring 是什么?

Spring 是一款主流的 Java EE 轻量级开源框架。

Spring 的作用:用于简化 Java 企业级应用的开发难度和开发周期

开始发布时间:2004年4月,Spring 1.0 版本正式发布。

1.2 Spring 广义和狭义划分

(一)广义的 Spring:Spring 技术栈

泛指以 Spring Framework 为核心的 Spring 技术栈。

例如:Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security等

(二)狭义的 Spring:Spring Framework

特指:Spring Framework,通常我们将它称为 Spring 框架

Spring 框架是一个分层的、面向切面的 Java 应用程序的一站式轻量级解决方案。

Spring 有两个最核心模块:IoC 和 AOP

1、IoC

IoC(Inverse of Control :控制反转):指把创建对象过程交给 Spring 进行管理。

2、AOP

AOP(Aspect Oriented Programming:面向切面编程):

  • 一种编程范式,用于将横切关注点(如日志、安全等)与业务逻辑分离,从而提高代码的模块化和可维护性。
  • AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等。

1.3 Spring Framework 的特点

  • 非侵入式(在使用 Spring 时候不需要依赖其他组件就可以直接使用
    • Spring 对应用程序本身的结构影响非常小,对领域模型可以做到零污染
    • 对功能性组件也只需要使用几个简单的注解进行标记,完全不会破坏原有结构
  • 控制反转(IoC)
    • 翻转资源获取方向,把自己创建资源、向环境索取资源变成环境将资源准备好,我们享受资源注入。
  • 面向切面编程(AOP)
    • 在不修改源代码的基础上增强代码功能。
  • 容器
    • Spring IoC 是一个容器,因为它包含并且管理组件对象的生命周期。组件享受到了容器化的管理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发效率。
  • 组件化
    • 使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用 XML 和 Java 注解组合这些对象。这使得我们可以基于一个个功能明确、边界清晰的组件有条不紊的搭建超大型复杂应用系统
  • 一站式
    • 在 IoC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。而且 Spring 旗下的项目已经涵盖了广泛的领域,很多方面的功能性需求可以在 Spring Framework 的基础上全部使用 Spring 来实现。

1.4 Spring 模块的

官网:https://spring.io

Spring 6 要求的 JDK 版本是 JDK 17

二、Spring 6 入门

2.1 笔记中涉及到的环境:

  • JDK :Java 17
  • Maven:3.9.6
  • Spring:

基本开发步骤:

父工程 

子模块

2.2 构建模块

2.3.1 引入依赖

htttp://spring.io/projects/spring-framework#learn

添加依赖:

<dependencies>
        <!--spring context 依赖-->
        <!--当你引入 Spring Context依赖后,表示将 Spring 的基础依赖引入了-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.1.4</version>
        </dependency>

        <!--junit-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.10.2</version>
        </dependency>
    </dependencies>

2.3.2 程序分析

1、之前创建对象,无参构造执行吗?—— 执行

无参构造执行

2、不用 new 方式,还可以如何创建对象?——反射

3、创建对象放到哪里?

2.5 启用 Log4j2 日志框架

2.5.1 Log4j2 日志概述

日志很重要。

日志记录了系统行为的时间、地点、状态等相关信息,能够帮助我们了解并监控系统状态,在发生错误或者接近某种危险状态时能够及时提醒我们处理,同时在系统产生问题时,能够帮助我们快速定位、诊断并解决问题。

Apache Log4j2 是一个开源的日志记录组件,使用非常的广泛,在工程中以易用方便代替了 System.out 等打印语句,它是Java 下最流行的日志输入工具

Log4j2 主要由几个重要的组件构成:

2.5.2 引入 Log4j2 依赖

<!--log4j2的依赖-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.19.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j2-impl</artifactId>
            <version>2.19.0</version>
        </dependency>

2.5.3 加入日志配置文件

在类的根路径下提供 log4j2.xml 配置文件(文件名固定为:log4j2.xml,文件必须放到类根路径下)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <loggers>
        <!--
            level 指定日志级别,从低到高的优先级:
            TRACE < DEBUG < INFO < WARN < ERROR < FATAL
            trace:追踪,是最低的日志级别,相当于追踪程序的执行
            debug:调试,一般在开发中,都将其设置为最低的日志级别
            info:信息,输出重要的信息,使用较多
            warn:警告,输出警告的信息
            error:错误,输出错误信息
            fatal:严重错误
        -->
        <root level="DEBUG">
            <appender-ref ref="spring6log"/>
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="log"/>
        </root>
    </loggers>

    <appenders>
        <!--输出日志信息到控制台-->
        <console name="spring6log" target="SYSTEM_OUT">
            <!--控制日志输出的格式-->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss sss} [%t] %-3level %logger{1024} - %msg%n"/>
        </console>

        <!--文件会打印出所有信息,这个 log 每次运行程序会自动清空,由 append 属性决定,适合临时测试用-->
        <File name="log" fileName="f:/spring6_log/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss sss} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <!--这个会打印出所有的信息
            每次大小超过 size
            则这 size 大小的日志会自动存入按年份-月份建立的文件夹下面进行压缩,
            作为存档
        -->
        <RollingFile name="RollingFile" fileName="f:/spring6_log/app.log" filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="50MB"/>
            <!-- DefaultRolloverStrategy 属性若不设置,
             则默认为最多同一文件夹下 7 个文件,这里设置了 30-->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </appenders>
</configuration>

2.5.4 测试

 

2.5.5 使用日志

三、容器:IoC

IoC(Inversion of Control:控制反转):是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。

Spring 通过 IoC 容器管理所有 Java 对象的实例化和初始化控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有任何区别。

  • 容器 Bean 对象:使用的是 map 集合;因为map 集合,key-value
  • 实例化的方式:
    • new
    • 使用 工厂
    • 使用 反射

IoC 容器是 Spring 框架中的最重要的核心组件之一,它贯穿了 Spring 从诞生到成长的整个过程。

3.1 IoC 容器

3.1.1 控制反转(IoC)

  • 控制反转是一种思想
  • 控制反转是为了降低程序耦合度,提高程序扩展力
  • 控制反转,反转的是什么?
    • 将对象的创建权利交出去,交给第三方容器负责
    • 将对象和对象之间关系的维护权交出去,交给第三方容器负责
  • 控制反转这种思想如何实现?
    • DI(Dependency Injection):依赖注入

IoC 容器中的过程:

 

3.1.2 依赖注入

依赖注入:实现了控制反转的思想

依赖注入:指 Spring 创建对象的过程中,将对象依赖属性通过配置进行注入。

依赖注入常见的实现方式包括两种:

  • 第一种:set 注入
  • 第二种:构造注入
package com.atguigu.spring6.iocxml.di;

public class Book {

    private String name;
    private String author;

    //生成构造
    //无参构造
    public Book() {}
    //有参构造
    public Book(String name, String author) {
        this.name = name;
        this.author = author;
    }

    //生成set方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public static void main(String[] args) {
        // set 方法注入
        Book book = new Book();
        book.setName("java");
        book.setAuthor("Max");

        //通过构造器注入
        Book book1 = new Book("c++", "max");
    }
}

IoC 是一种控制反转的思想,而 DI 是对 IoC 的一种具体实现。

Bean 管理说的是:Bean 对象的创建,以及 Bean 对象中属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值