IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring(一) -> 正文阅读

[Java知识库]Spring(一)

视频链接:https://www.bilibili.com/video/BV1q94y1o7ts?vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P1— P38

1.Spring概述

在这里插入图片描述
spring框架:它是一个容器,是整合其它框架的框架.核心是TOC和AOP.它由20多个模块构成.在很多领域都提供优秀的解决方案.

1.1 Spring框架

  • Spring是于2003年兴起的一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IOC)和面向切面编程(AOP)。 Spring是可以在Java SE/EE中使用的轻量级开源框架。
  • Spring的主要作用就是为代码"解耦”,降低代码间的耦合度。就是让对象和对象(模块和模块)之间关系不是使用代码关联,而是通过配置来说明。即在 Spring中说明对象(模块)的关系。
  • Spring根据代码的功能特点,使用IOC 降低业务对象之间耦合度。IOC使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由Spring 容器统一管理,自动“注入",注入即赋值。而AOP使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务"混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。
  • 官网: https://spring.io/【Spring 官网有Spring家族技术的介绍,有相应框架的jar包和文档,还有源码文件】

1.2 Spring特点

  1. 轻量级:由20多个模块构成,每个jar包都很小,小于1M,核心包也就3M左右.对代码无污染
  2. 面向接口编程:使用接口,就是面向灵活,项目的可扩展性,可维护性都极高.接口不关心实现类的类型.使用时接口指向实现类,切换实现类即可切换整个功能.
  3. AOP:面向切面编程【将公共的,通用的,重复的代码单独开发,在需要的时候反织回去.底层的原理是动态代理.】
    在这里插入图片描述
  4. 整合其它框架【整合后使其它框架更易用】

1.3 Spring体系结构

Spring 由20多个模块组成,它们可以分为数据访问/集成(Data Access/Integration).Web、面向切面编程(AOP Aspects)提供JVM的代理(Instrumentation.消息发送(Messaging)核心容器(Core Container)和测试( Test)。
在这里插入图片描述

2. IOC 控制反转【基于xml】

控制反转IOC(Inversion of Control)是一个概念,是一种思想。由spring容器进行对象的创建和依赖注入.程序员在使用时直接取出使用.
正转:由程序员进行对象的创建和依赖注入称为正转.程序员说了算.

在这里插入图片描述

反转:由spring容器创建对象和依赖注入称为反转,将控制权从程序员手中夺走,交给spring容器,称为反转.容器说了算

在这里插入图片描述


  • IOC是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖注入。应用广泛。
  • 依赖: classA类中含有 classB的实例,在 classA中调用classB的方法完成功能,即classA对classB有依赖。
  • 依赖注入:Dl(Dependency Injection),程序代码不做定位查询,这些工作由容器自行完成。依赖注入DI是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。
  • Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象之间依赖关系的管理。Spring框架使用依赖注入(DI)实现IOC
  • Spring 容器是一个超级大工厂,负责创建、管理所有的Java对象,这些Java对象被称为Bean。Spring容器管理着容器中 Bean之间的依赖关系,Spring使用“依赖注入”的方式来管理Bean之间的依赖关系。使用IOC实现对象之间的解耦和。

2.1 spring创建对象

在这里插入图片描述

在这里插入图片描述

2.2 给创建的对象赋值

  • 使用setter注入
    简单类型注入:使用value属性
    引用类型注入:使用ref属性
    注意:使用setter注入必须提供无参的构造方法,必须提供setXXX()方法

简单类型注入:
在这里插入图片描述
在这里插入图片描述
引用类型注入:
先定义school类,然后在student中对school类进行引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 使用构造方法注入
    Student stu = new student (“张三”,22) ;【使用构造方法创建对象的同时初始化对象】

a.使用构造方法的参数名字进行注入值
创建对象:
在这里插入图片描述
注入:【其中name 和 address都是构造方法的名称】
在这里插入图片描述
测试:
在这里插入图片描述

b.使用构造方法参数的下标注入值
定义一个学生类,其中包含一个school
在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述

c.使用默认的构造方法的参数的顺序注入值
在这里插入图片描述
测试:
在这里插入图片描述

2.3 项目案例

使用三层架构进行用户的插入操作:界面层,业务逻辑层,数据访问层(模拟)

spring接管下的三层项目构建:
实体类
com.bjpowernode.pojo    		Users
数据访问层
com. bjpowernode.dao  			UsersMapper.java(接口)
                      			UsersMapperImpl.java(实现类)
业务逻辑层
com. bjpowernode .service       UsersService.java(接口)
								UsersserviceImpl.java (实现类)
界面层
com.bjpowernode.controller 		Userscontroller.java

实体类的创建
在这里插入图片描述
数据访问层
定义接口:
在这里插入图片描述
同一个目录下写接口的实现类:
在这里插入图片描述
业务逻辑层
定义接口:
在这里插入图片描述
同一个目录下写接口的实现类:
在这里插入图片描述
界面层
在这里插入图片描述
测试
在这里插入图片描述

2.4 Spring 接管三层对象的创建

添加Spring依赖:

在这里插入图片描述
创建数据访问层对象:

在这里插入图片描述
创建业务逻辑层的对象:

在这里插入图片描述
在这里插入图片描述
创建界面层的对象:

在这里插入图片描述
在这里插入图片描述
测试:

在这里插入图片描述

3.基于注解的IOC

3.1 基本概念

也称为DI (Dependency Injection),它是IOC的具体实现的技术.
上面使用xml来创建对象并依赖注入,在这里使用注解annotation创建对象并依赖注入
基于注解的IOC,必须要在spring的核心配置文件中添加包扫描

  • 创建对象的注解
    @Component:可以创建任意对象.
    @Controller:专门用来创建控制器的对象(Servlet),这种对象可以接收用户的请求,可以返回处理结果给客户端.
    @Service:专门用来创建业务逻辑层的对象,负责向下访问数据访问层,处理完毕后的结果返回给界面层.
    @Repository:专门用来创建数据访问层的对象,负责数据库中的增删改查所有操作.
  • 依赖注入的注解
    简单类型(8种基本类型+String)的注入:@Value【用来给简单类型注入值】
    引用类型的注入:
    A.@Autowired【使用类型注入值,从整个Bean工厂中搜索同源类型的对象进行注入】
    B.@Autowired ,@Qualifier【使用名称注入值,从整个Bean工厂中搜索相同名称的对象进行注入】

3.2 @Component

创建的对象的默认名称是类名的驼峰命名法.也可以指定对象的名称@Component(“指定名称”).

先搭建项目,修改目录,修改pom.xml文件

  • 创建student类
    在这里插入图片描述
  • 添加包扫描
    在这里插入图片描述
  • 测试类
    在这里插入图片描述
  • 取出对象
    在这里插入图片描述

3.3 简单类型注入

在这里插入图片描述

3.4 引用类型注入

同源类型也可注入
同源类型:
a.被注入的类型(Student中的school)与注入的类型是完全相同的类型
b.被注入的类型(Student中的school父)与注入的类型(子)是父子类
c.被注入的类型(Student中的school接口)与注入的类型(实现类)是接口和实现类的类型

3.4.1 按类型注入

按类型注入,School中的 @Component一定要加上
创建school对象:
在这里插入图片描述
创建student对象:

在这里插入图片描述
测试类:
在这里插入图片描述

3.4.2 按名称注入

改变School对象:
在这里插入图片描述

改变Student对象:
在这里插入图片描述
测试案例不变

3.4.3 有父子类的情况

  • 按类型注入值:【注意:在有父子类的情况下,使用按类型注入,就意味着有多个可注入的对象.此时按照名称进行二次筛选,选中与被注入对象相同名称的对象进行注入.】
    School对象:
    在这里插入图片描述

定义SubSchool对象【继承School对象】:
在这里插入图片描述
Student对象:
在这里插入图片描述
测试:
在这里插入图片描述
测试结果:
在这里插入图片描述

  • 按名称注入值:【注意:如果有父子类的情况下,直接按名称进行注入值.】
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.5 基于注解的三层项目的改造

添加依赖:
在这里插入图片描述
添加包扫描:
在这里插入图片描述
添加注解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述

3.6 添加包扫描的N种方式

  1. 单个包扫描(推荐使用)
    在这里插入图片描述
  2. 多个包扫描,多个包之间以逗号或者空格或分号分隔
    在这里插入图片描述
  3. 扫描根包(不推荐)【会降低容器启动的速度,导致多做无用功】

在这里插入图片描述

3.7 Spring配置文件的拆分

当项目越来越大,需要多人合作开发,一个配置就存在很大隐患,就需要拆分配置文件
拆分配置文件的策略:

  • A.按层拆
    在这里插入图片描述

  • B.按功能拆
    在这里插入图片描述

3.8 Spring配置文件的整合

  • 单个文件导入
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述

  • 批量导入
    在这里插入图片描述
  • 基于注解的三层项目的配置文件改造
    单独创建三个.xml
    在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.9 基于xml的引用类型的自动注入

在整个bean工厂中搜索,有没有这种类型的对象,有就自动注入
在这里插入图片描述

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:12:55  更:2022-09-21 00:16:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:05:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码