Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Spring】IoC和DI,控制反转,Bean对象的获取方式

【Spring】IoC和DI,控制反转,Bean对象的获取方式

作者头像
三三是该溜子
发布于 2024-12-30 04:32:05
发布于 2024-12-30 04:32:05
8200
代码可运行
举报
文章被收录于专栏:该溜子的专栏该溜子的专栏
运行总次数:0
代码可运行

一:什么是IoC

通过前面的学习,我们了解到Spring是一个含有多种工具和方法的IoC容器,那么什么是容器,神什么是IoC容器呢?

1:什么是容器

回想我们学过的集合List<> Map<> 这就是数据存储容器,Tomcat就是Web容器

2:什么是IoC

IoC是 Inversion of Control 的缩写,译为“控制反转”,在以前我们需要某个对象的时候,就new一个对象,但是现在我们可以把对象交给Spring来管理,当我们需要对象的时候,Spring来new,我们只需要注入(DI)即可,所以Spring有时也被成为Spring容器

二:IoC应用举例

在传统的代码中对象创建顺序是:Car->Framework->Bottom->Tire 改进之后解耦的代码的对象创建顺序是:Tire->Bottom->Framework->Car

1:理解控制反转

改进之后的控制权发⽣反转,不再是使⽤⽅对象创建并控制依赖对象了,⽽是把依赖对象注⼊将当前对象中,依赖对象的控制权不再由当前类控制了.

这样的话,即使依赖类发⽣任何改变,当前类都是不受影响的,这就是典型的控制反转,

2:理解控制反转容器

这部分代码,就是IoC容器做的⼯作

3:IoC容器优点

(1)资源集中管理

IoC容器会帮我们管理⼀些资源(对象等),我们需要使⽤时,只需要从IoC容器中去取就可以了

(2)解耦合

我们在创建实例的时候不需要了解其中的细节,降低了使⽤资源双⽅的依赖程度,也就是耦合度.

三:什么是DI

DI:Dependency Injection(依赖注⼊)

程序运⾏时需要某个资源,此时容器就为其提供这个资源 比如我需要Student对象,IoC容器就为我new一个Student对象

IoC是⼀种思想,⽽DI就属于具体的实现

概念清楚了,下面我们来学习一下如何使用IoC和DI吧

四:Bean

1:Bean对象

Spring被称为IoC控制反转容器,(即把对象的控制权交给Spring来管理,这里的控制权包括对象的创建和销毁)它所具备的两个核心功能就是:存和取

我们把存入Spring容器中的对象叫做“Bean”对象。

2 :Bean的存储

通过以前的学习,我们知道比如有一个class Student{}类,我们想要实例化的话需要这么一行代码

Student student = new Student();

但是现在我们只需要引入注解就可以达到这样的目的

这里共有两类注解可以实现

①类注解:@Controller 、 @Service 、 @Repository 、 @Component 、@Configuration

②方法注解:@Bean

3:Bean的名称

我们不需要为bean对象指定名称,Spring会帮我们自动生成

(1)小驼峰命名

Bean命名约定,以⼩写字⺟开头,然后使⽤驼峰式⼤⼩写,⽐如 类名:UserController,Bean的名称为:userController 类名:AccountManager,Bean的名称为:accountManager

(2)原始命名

特殊情况,第⼀个和第⼆个字符都是⼤写时,将保留原始的⼤⼩写,比如

类名:UController,Bean的名称为:UController 类名:AManager,Bean的名称为:AManager

4:Bean的类型

为类名.class 比如

Student.class

5:Bean来源于BeanFactory

ApplicationContext获取bean对象的功能,是父类BeanFactory提供的功能

常⽤的是1,2,4,这三种⽅式,获取到的bean是⼀样的,可以打印地址测试,下面的@Controller注解举例中自行测试哈

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface BeanFactory {
   
    // 1. 根据bean名称获取bean
    Object getBean(String var1) throws BeansException;

    // 2. 根据bean名称和类型获取bean
    <T> T getBean(String var1, Class<T> var2) throws BeansException;

    // 3. 按bean名称和构造函数参数动态创建bean,只适⽤于具有原型(prototype)作⽤域的bean
    Object getBean(String var1, Object... var2) throws BeansException;

    // 4. 根据类型获取bean
    <T> T getBean(Class<T> var1) throws BeansException;

    // 5. 按bean类型和构造函数参数动态创建bean, 只适⽤于具有原型(prototype)作⽤域的bean
    <T> T getBean(Class<T> var1, Object... var2) throws BeansException;
    
}

6:上下文

ApplicationContext翻译过来就是:Spring上下⽂ 因为对象都交给Spring管理了,所以获取对象要从Spring中获取,那么就得先得到Spring的上下⽂

五:类注解

1:@Controller
(1)控制器存储
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Controller // 将对象存储到 Spring 中
public class UserController {
    public void sayHi(){
        System.out.println("hi,UserController...");
    }
}
(2)根据类型获取对象

如何从Spring容器中获取对象呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
public class SpringIocDemoApplication {
    public static void main(String[] args) {
//获取Spring上下⽂对象
        ApplicationContext context =
        SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring上下⽂中获取对象
        UserController userController = context.getBean(UserController.class);
//使⽤对象
        userController.sayHi();
    }
}
(3)运行结果
(4)根据bean命名获取Bean对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
public class SpringIocDemoApplication {
    public static void main(String[] args) {
//获取Spring上下⽂对象
        ApplicationContext context =
        SpringApplication.run(SpringIocDemoApplication.class, args);
//根据bean名称, 从Spring上下⽂中获取对象,返回的是Object类型需要强转
        UserController userController2 = (UserController)context.getBean("userController");
//使⽤对象
        userController.sayHi();
    }
}
(5)根据bean类型+名称获取Bean对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
public class SpringIocDemoApplication {
    public static void main(String[] args) {
//获取Spring上下⽂对象
        ApplicationContext context =
        SpringApplication.run(SpringIocDemoApplication.class, args);
//根据bean名称+类型, 从Spring上下⽂中获取对象
        UserController userController3 = context.getBean("userController",UserController.class);
//使⽤对象
        userController.sayHi();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JAVAEE一>Spring IoC和DI详解
把对象交给Spring管理,需要添加一些注解这里共有两类注解可以使用: 1.类注解:@Controller,@Service,@Repository,@Component,@Configuration
用户11305962
2025/02/24
960
JAVAEE一>Spring IoC和DI详解
【Spring】Spring IOC&DI:架构旋律中的“依赖交响”与“控制华章”
通过前⾯的学习, 我们知道了Spring是⼀个开源框架, 他让我们的开发更加简单. 他⽀持⼴泛的应⽤场景, 有着活跃⽽庞⼤的社区, 这也是Spring能够⻓久不衰的原因.但是这个概念相对来说, 还是⽐较抽象.
用户11288949
2025/01/17
820
【Spring】Spring IOC&DI:架构旋律中的“依赖交响”与“控制华章”
《JavaEE进阶》----11.<SpringIOC&DI【Spring容器+IOC详解+DI介绍】>
1.资源集中管理:IOC容器会帮我们管理一些资源(对象等)。我们使用时,从IOC容器取就可以了。
用户11288958
2024/09/24
1400
《JavaEE进阶》----11.<SpringIOC&DI【Spring容器+IOC详解+DI介绍】>
【Spring】获取Bean对象需要哪些注解
引入:在上一篇文章中,我简单的认识了IoC容器和DI依赖注入,控制反转的基本原理,使用@Controller存储bean对象,以及三种获取bean对象的方式。本篇文章,将继续对bean对象的存储五大注解进行展开
三三是该溜子
2024/12/30
880
【Spring】获取Bean对象需要哪些注解
Spring详解(二)------IOC控制反转
IT可乐
2018/01/04
7980
Spring详解(二)------IOC控制反转
IOC控制反转 + DI依赖注入
Spring中的IOC一种思想,两种实现方式IOC (Inversion of Control):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入核心业务:(a)对象的创建 (b)依赖的注入2种实现方式基于xml实现IOC基于注解实现IOC基于xml的IOC在前3篇Spring博客中简单探讨过了,后面将探讨基于注解的IOC基于注解的IOCDI (Dependency Injection):基于注解的IOC被称为DI,即依赖注入, 是IOC思想的一种具体实现方式根据IOC的核心业务即:(
愿天堂没有BUG
2022/09/28
3030
系统学习SpringFramework:Spring IOC
IoC(Inversion of control )即“控制反转”,它是一种设计思想而非一个技术实现。描述了Java 开发领域对象的创建以及管理的问题。通过Spring来管理对象的创建、配置和生命周期,这样相当于把控制权交给了Spring,不需要人工来管理对象之间复杂的依赖关系,这样做的好处就是解耦。
栗筝i
2022/12/01
2680
系统学习SpringFramework:Spring IOC
Spring框架之IOC(控制反转)
IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,很好地实现了解耦合。所以,简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
SmileNicky
2019/01/17
2.7K0
设计模式----手写IOC容器
核心容器,AOP和设备支持,数据访问和集成,Web组件,通信报文和集成测试,下面是Spring框架的总体架构图:
好派笔记
2021/10/07
3500
Spring学习笔记 | 控制反转IoC与依赖注入DI
IoC 是Spring框架最核心的特性之一。在IoC模式下,对象(组件)的创建和管理不再由对象自己负责,而是交给了IoC容器。对象只需要声明自己的依赖,IoC容器会在运行时自动将依赖注入到对象中。
windealli
2024/04/30
4040
Spring学习笔记 | 控制反转IoC与依赖注入DI
Spring核心之控制反转(IOC)
Spring作为一个开源的Java框架,为开发者提供了全方位的企业级应用开发支持。其中,Spring的核心特性之一便是控制反转(Inversion of Control, IOC)。本文将解析什么是Spring的IOC,以及如何在项目中使用它。
灬沙师弟
2024/01/25
1550
Spring核心之控制反转(IOC)
3、Spring 之IOC 容器 详解
IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。
叫我阿杰好了
2023/10/17
7K0
3、Spring 之IOC 容器 详解
Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念
在前一篇文章中介绍了如何构建源码阅读环境,既然构建好了源码环境,本地也可以正常运行,那就开始阅读源码吧!
程序员小航
2020/12/03
3010
Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念
Spring IoC容器与Bean管理
从本节开始,我将要学习作为java高级阶段最最最最重要的一个框架体系,名为Spring。Spring是整个Java生态中最重要的一环。因为我也是初学,所以我的概括也不一定全面和精炼。写这一章只是为自己以后复习。
害恶细君
2022/11/22
7370
Spring IoC容器与Bean管理
Spring之IOC容器
spring core提供了IOC,DI,Bean配置装载创建的核心实现 核心概念: Beans、BeanFactory、BeanDefinitions、ApplicationContext
冬天vs不冷
2025/01/21
2380
Spring之IOC容器
Spring框架IoC控制反转
Spring是与2003年兴起的一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IOC)和面向切面编程(AOP)。Spring是可以在Java SE/EE中使用的轻量级开源框架。
久绊A
2024/03/01
1280
第一章 Spring 的控制反转/依赖注入
spring:春天 IOC:将创建对象的权力交给 spring 核心容器去控制。工厂模式
张哥编程
2024/12/07
900
控制反转 依赖注入 基本概念 与 Spring IOC 源码学习
1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”,还有些书籍翻译成为“控制反向”或者“控制倒置”。IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。
大鹅
2021/06/16
7500
【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以
第一步 把 service 和 dao 对象创建,在 service 和 dao 类添加创建对象注解
小尘要自信
2023/10/10
6460
【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以
Spring核心之控制反转IOC
第一个值默认值,singleton,表示单实例对象 第二个值prototype,表示是多实例对象
用户9615083
2022/12/25
5340
Spring核心之控制反转IOC
相关推荐
JAVAEE一>Spring IoC和DI详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验