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 (二) --------- IoC 控制反转 -> 正文阅读

[Java知识库]Spring (二) --------- IoC 控制反转


一、简介

控制反转 (IoC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,依赖的管理。

IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖注入。应用广泛。

二、依赖

classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完成功能,即 classA 对 classB 有依赖。

三、IoC 的实现

依赖注入:DI(Dependency Injection),程序代码不做定位查询,这些工作由容器自行完成。

依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象之间依赖关系的管理

Spring 框架使用依赖注入(DI)实现 IoC。

Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。

Spring 容器管理着容器中 Bean 之间的依赖关系,Spring 使用依赖注入的方式来管理 Bean 之间的依赖关系。使用 IoC 实现对象之间的解耦和。

四、第一个 Spring 程序

1. 使用Spring框架创建自定义类型对象

1.设置本机仓库

在这里插入图片描述

2.创建 Maven 项目

在这里插入图片描述

3.引入 Maven 依赖 pom.xml

添加 Spring 依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.14</version>
</dependency>

在这里插入图片描述
4.定义接口及实现类

SomeService接口

public interface SomeService {
    void doSome();
}

SomeServiceImpl 为SomeService 接口实现类

public class SomeServiceImpl implements SomeService {
	public SomeServiceImpl() {
		super();
		System.out.println("SomeServiceImpl无参数构造方法");
	}
	@Override
	public void doSome() {
		System.out.println("====业务方法doSome()===");
	} 
}

在这里插入图片描述
5.创建 Spring 配置文件

在 src / main / resources / 目录现创建一个 xml 文件,文件名可以随意,但 Spring 建议的名称为applicationContext.xml。

步骤:

new --> XML Configuration File --> Spring Config

如果没有 Spring Config 这个选项,则是 pom.xml 中的 Spring 依赖没有配置好的缘故,要记住添加完依赖后要点击旁边的 reload 按钮

在这里插入图片描述
创建完后如图所示

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
       <!-- 约束文件 -->
       <!--  注册 bean 对象
           id : 自定义对象名称,通过id在代码中使用对象
           class : 类的全限定名称,不能是接口
       -->
</beans>

spring 配置中需要加入约束文件才能正常使用,约束文件是 .xsd 扩展名

然后注册bean对象,即在上述代码内部添加

<bean id = "someService" class="com.fancy.SomeServiceImpl">

<bean / >:用于定义一个实例对象。一个实例对应一个 bean 元素。所谓的Java Bean 在 Spring 中即为 Java 对象

  • id :该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依赖关系也是通过 id 属性关联的。

  • class :指定该 Bean 所属的类,注意这里只能是类,不能是接口。

6.定义测试类

创建测试类Test 在其中定义方法test01,并写入以下内容

 String resource = "applicationContext.xml";
 ApplicationContext ac = new ClassPathXmlApplicationContextO(resource);
 SomeService service = (SomeService) ac.getBean("someService");
 service.doSome();

完整测试类:

package com.fancy;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {
    @Test
    public void test01() {
        // 1. 指定 spring 配置文件的位置和名称
        String resource = "applicationContext.xml";
        // 2. 创建 spring 容器对象
        ApplicationContext ac = new ClassPathXmlApplicationContext(resource);
        // 3. 从 spring 容器中获取对象, 使用id
        SomeService service = (SomeService) ac.getBean("someService");
        // 4. 执行对象的业务方法
        service.doSome();
    }
}

在这里插入图片描述

2. 使用 Spring 框架创建非自定义类型对象

如果是使用 Spring 创建非自定义类型对象呢 ?

比如创建日期类对象

在 spring 配置文件 applicationContext.xml 文件中 加入 java.util.Date 定义 :

<bean id="myDate" class="java.util.Date"></bean>

在测试类中:

调用 getBean(“myDate”); 获取日期类对象。

3. 容器接口与实现类

  • ApplicationContext 接口(容器)
    ApplicationContext 用于加载 Spring 的配置文件,在程序中充当”容器”的角色。其实现
    类有两个 :ClassPathXmlApplicationContextFileSystemXmlApplicationContext
  1. 配置文件在类路径下:若 Spring 配置文件存放在项目的类路径下,则使用 ClassPathXmlApplicationContext 实现类进行加载。
  2. ApplicationContext 容器中对象的装配时机: ApplicationContext 容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。
  3. 使用 Spring 容器创建 Java 对象 :
    在这里插入图片描述
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 10:54:21  更:2022-02-04 10:56:06 
 
开发: 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/24 11:00:34-

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