前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
jQuery学习笔记之DOM操作、事件绑定(2)
jQuery学习笔记之DOM操作、事件绑定(2) ————————————————————学习目录———————————————————————— 4.DOM操作 5.事件绑定
王小雷
2019/05/26
1.6K0
JavaWeb——JQuery之DOM操作应用及实践案例总结(DOM内容操作、DOM属性操作、CRUD操作)
【注意】:prop和attr的区别,如果操作的是元素的固有属性(非自定义的),建议使用prop;若是自定义属性,建议用attr。
Winter_world
2020/09/25
3.2K0
JavaWeb——JQuery之DOM操作应用及实践案例总结(DOM内容操作、DOM属性操作、CRUD操作)
Jquery基础之DOM操作
Dom是Document Object Model的缩写,意思是文档对象模型。DOM是一种与浏览器、平台、语言无关的接口,使用该接口可以轻松访问页面中所有的标准组件。DOM操作可以分为三个方面即DOM Core(核心)、HTM-DOM和CSS-DOM。
张哥编程
2024/12/19
1780
Jquery基础之DOM操作
jQuery文档对象模型DOM的实际应用
DOM 在 JavaScript 课程中我们详细的探讨过,它是一种文档对象模型。方便开发者对 HTML 结构元素内容进行展示和修改。在 JavaScript 中,DOM 不但内容庞大繁杂,而且我们开发的过程中需要考虑更多的兼容性、扩展性。
王小婷
2018/12/19
1.2K0
JQuery中DOM操作示例代码
Jquery的DOM操作 1、插入节点代码示例: <p title=”选择你喜欢的水果”>你最喜欢的水果是?</p> <ul> <li title=”苹果”>苹果</li> <li title=”橘子”>橘子</li> <li title=”菠萝”>菠萝</li> </ul> <script language=”javascript”> var $li_1=$(“<li title=’香蕉’>香蕉</li>”); var $li_2=$(“<li title=’雪梨’>雪梨</li>”); $(“ul”).
苦咖啡
2018/05/07
1.3K0
JQuery-学习笔记03【基础——DOM操作】「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/01
2K0
JQuery-学习笔记03【基础——DOM操作】「建议收藏」
【JQuery框架】超详细DOM操作看这一篇就够了!
之前和大家分享了jQuery框架中选择器的相关操作“【JQuery框架】五大选择器“全家桶”详解!!!”
灰小猿
2021/09/14
5690
Jquery的属性操作和DOM操作
       3 val()    :     获取或设置表单内容    (原生JS使用value)
用户3159471
2018/09/13
1.4K0
Jquery的属性操作和DOM操作
Web阶段:第五章:JQuery库
点击:API文档下载 Jquery介绍 1.什么是JQuery ? jQuery,顾名思义,也就是JavaScript和查询(Query),它就是辅助JavaScript开发的js类库。 2.JQue
Java廖志伟
2022/09/28
26.7K0
Web阶段:第五章:JQuery库
JQuery快速入门
Write less, do more, I like jQuery. jQuery是最常用的js库,整体来说非常轻量并易于扩展,对于移动应用可以使用其更轻量的孪生兄弟Zepto代替。其是由John
用户1216676
2018/01/24
2.7K0
JQuery快速入门
jQuery基础
一 jQuery是什么? [1]   jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team。 [2]   jQuery是继prototype之后又一个优秀的Javascript框架。其宗旨是——WRITE LESS,DO MORE! [3]  它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器 [4]  jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTMLdo
用户1214487
2018/01/24
2.2K0
jquery dom操作
var li=$("ul i:eq(1)") var li_txt=li.text() alert(li_txt)
用户5760343
2019/10/08
9340
jquery dom操作
jQuery_T2_DOM操作
当我们点击文字的时候会添加一个【p_text】class,对应的style就会生效。
红目香薰
2022/11/30
7.9K0
jQuery_T2_DOM操作
前端(四)-jQuery
$(this)就是将这个dom对象转换成jquery对象,就可以对这个对象进行操作;
化羽羽
2022/10/28
8.8K0
JQuery中DOM对象
var li_1 = ("< li id=‘liApple’>苹果< /li>"); //创建一个li元素。
我不是费圆
2020/09/21
4.9K0
jQery基础操作
remove():删除整个节点 empty():清空节点内容 detach():删除整个节点,保留元素的绑定事件、附加的数据
xiaozhangStu
2023/05/04
3560
jQuery基础图文系列
jquery的入口函数是在html所有标签都加载后才执行,而JavaScript的window.onload事件是等到所有内容加载完后才执行。
菲宇
2019/07/31
4.6K0
jQuery基础图文系列
六、jQuery节点操作
replaceWith()与replaceAll()都会替换所有匹配的元素为指定元素。
Dreamy.TZK
2020/06/19
1.7K0
六、jQuery节点操作
Jquery入门基础教程免费版
目前jQuery有三个大版本。 1.X:兼容IE678,使用最为广泛,官网只做BUG维护,功能不再新增。因此一般项目来说,使用1.X版本就可以了,最终版本:1.12.4 (2016年5月20日)
张哥编程
2024/12/13
4380
Jquery入门基础教程免费版
前端学习之jQuery
[1]   jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team。
超蛋lhy
2018/08/31
3.3K0
相关推荐
jQuery学习笔记之DOM操作、事件绑定(2)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验