目录

1 定义
2 控制反转(IoC)
2.1 私有属性保存依赖
2.2 让Spring控制类构建过程
2.3 这就是IoC
3 Bean?

Spring有跟多概念,其中最基本的一个就是bean,那到底spring bean是什么?

Bean是Spring框架中最核心的两个概念之一(另一个是面向切面编程AOP)。

是否正确理解 Bean 对于掌握和高效使用 Spring 框架至关重要。

遗憾的是,网上不计其数的文章,却没有简单而清晰的解释。

那么,Spring bean 到底是什么?

接下来我们用图文方式来解析这一个概念。

1 定义
Spring 官方文档对 bean 的解释是:

In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container.

翻译过来就是:

在 Spring 中,构成应用程序主干并由Spring IoC容器管理的对象称为bean。bean是一个由Spring IoC容器实例化、组装和管理的对象。

概念简单明了,我们提取处关键的信息:

bean是对象,一个或者多个不限定
bean由Spring中一个叫IoC的东西管理
我们的应用程序由一个个bean构成
第1和3好理解,那么IoC又是什么东西?

2 控制反转(IoC)
控制反转英文全称:Inversion of Control,简称就是IoC。

控制反转通过依赖注入(DI)方式实现对象之间的松耦合关系。

程序运行时,依赖对象由【辅助程序】动态生成并注入到被依赖对象中,动态绑定两者的使用关系。

Spring IoC容器就是这样的辅助程序,它负责对象的生成和依赖的注入,让后在交由我们使用。

简而言之,就是:IoC就是一个对象定义其依赖关系而不创建它们的过程。

这里我们可以细分为两个点。

2.1 私有属性保存依赖
第1点:使用私有属性保存依赖对象,并且只能通过构造函数参数传入,

构造函数的参数可以是工厂方法、保存类对象的属性、或者是工厂方法返回值。

假设我们有一个Computer类:

public class Computer {
private String cpu; // CPU型号
private int ram; // RAM大小,单位GB

public Computer(String cpu, int ram) {this.cpu = cpu;this.ram = ram;
}

}
我们有另一个Person类依赖于Computer类,符合IoC的做法是这样:

public class Person {
private Computer computer;

public Person(Computer computer) {this.computer = computer;
}

}
不符合IoC的做法如下:

// 直接在Person里实例化Computer类
public class Person {
private Computer computer = new Computer(“AMD”, 3);
}

// 通过【非构造函数】传入依赖
public class Person {
private Computer computer;

public void init(Computer computer) {this.computer = computer;
}

2.2 让Spring控制类构建过程
第2点:不用new,让Spring控制new过程。

在Spring中,我们基本不需要 new 一个类,这些都是让 Spring 去做的。

Spring 启动时会把所需的类实例化成对象,如果需要依赖,则先实例化依赖,然后实例化当前类。

因为依赖必须通过构建函数传入,所以实例化时,当前类就会接收并保存所有依赖的对象。

这一步也就是所谓的依赖注入。

2.3 这就是IoC
在 Spring 中,类的实例化、依赖的实例化、依赖的传入都交由 Spring Bean 容器控制,

而不是用new方式实例化对象、通过非构造函数方法传入依赖等常规方式。

实质的控制权已经交由程序管理,而不是程序员管理,所以叫做控制反转。

3 Bean?
至于bean,则是几个概念。

概念1:Bean容器,或称spring ioc容器,主要用来管理对象和依赖,以及依赖的注入。
概念2:bean是一个Java对象,根据bean规范编写出来的类,并由bean容器生成的对象就是一个bean。
概念3:bean规范。

bean规范如下:

所有属性为private
提供默认构造方法
提供getter和setter
实现serializable接口

spring bean是什么相关推荐

  1. spring Bean自动装配

    spring Bean自动装配 自动装配是使用spring满足bean依赖的一种方式. spring会在应用上下文中为某个bean寻找其依赖的bean. spring自动装配需要从两个角度来实现,或者 ...

  2. Spring Bean 中的线程安全

    在 使用Spring框架时,很多时候不知道或者忽视了多线程的问题.因为写程序时,或做单元测试时,很难有机会碰到多线程的问题,因为没有那么容易模拟多线 程测试的环境.但如果不去考虑潜在的漏洞,它就会变成 ...

  3. Spring Bean配置方式之一:Java配置

    简介: Spring bean 是使用传统的 XML 方法配置的.在这篇文章中,您将学习使用基于纯 Java 的配置而非 XML 来编写 Spring bean 并配置它们.本文将介绍可用来配置 be ...

  4. Spring bean 实现生命周期的三种解决方案

    Spring bean 实现生命周期的三种解决方案 参考文章: (1)Spring bean 实现生命周期的三种解决方案 (2)https://www.cnblogs.com/javawebsoa/a ...

  5. Spring ----Bean的生命周期

    这Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理, 一般担当管理者角色的是BeanFactory或ApplicationConte ...

  6. 【Spring实战】注入非Spring Bean对象

    2019独角兽企业重金招聘Python工程师标准>>> 大家经常用到Spring IOC去管理对象之间的依赖关系,但一般情况下都有一个前提:这些Bean对象必须是通过Spring容器 ...

  7. spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停地来唤醒记忆深处的知识点. Q1.什么是Spring框架? Spring是最流行的企业应用程序框架之一.Spring ...

  8. 【一步一步学习spring】spring bean管理(上)

    1. spring 工厂类 我们前边的demo中用到的spring 工厂类是ClassPathXmlApplicationContext,从上图可以看到他还有一个兄弟类FileSystemApplic ...

  9. Spring bean加载多个配置文件

    在一个大的项目结构,Spring bean配置文件位于不同的文件夹以便于维护和模块化.例如,Spring-Common.xml在common 文件夹中,Spring-Connection.xml 在c ...

  10. spring bean生命周期管理--转

    Life Cycle Management of a Spring Bean 原文地址:http://javabeat.net/life-cycle-management-of-a-spring-be ...

最新文章

  1. 8.6M超轻量中英文OCR模型开源,训练部署一条龙 | Demo在线可玩
  2. BZOJ3526[Poi2014]Card——线段树合并
  3. 12、索引在什么情况下不会被使用?
  4. 单林多域群集环境中将Exchange 2003迁移到Exchange 2010之二
  5. mysql dump gtid_mysqldump GTID搭建主从复制库
  6. 接口自动化测试持续集成--Soapui接口功能测试参数化
  7. C++的安全类型转换的讨论
  8. plsqldevelop安装教程
  9. 从 ASP.NET Core 2.1 迁移到 2.2 踩坑总结
  10. C# .NET 使用DotNetZip开源类库 处理 压缩/解压 Zip 处理乱码情况
  11. 虚拟机安装苹果系统_开源神器:助你快速安装苹果虚拟机!
  12. MyBatis入门到精通,最全最详细的MyBatis学习教程来了
  13. java二进制传输_Java基于TCP方式的二进制文件传输
  14. 痞子衡嵌入式:深扒i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合...
  15. The Open Group即将举办线上线下企业架构从业者峰会
  16. xcode引入sdk_解决Xcode引入第三方SDK找不到头文件
  17. canvas实现点线动画效果
  18. python发送短信验证码登录_python发送短信验证码
  19. jquery选择器(照着jq手册写的)
  20. 我博士科研经历中的经验和教训——朱亮

热门文章

  1. easyexcel分页导出多个excel
  2. 解决RDkit输入smiles画分子的二维图时出现保存不了图片的问题: AttributeError: ‘Image‘ object has no attribute ‘save‘
  3. 解决spacy中“Can‘t find model ‘en_core_web_trf‘. It dosen‘t seem to be a shortcur link”
  4. 上传的linux安装里面,没提供安装链接
  5. 查看电脑显卡(GPU)是否支持CUDA及其版本
  6. phton进行批量线性拟合以及批量快速出图
  7. sourcemap文件泄露漏洞
  8. 变频器由计算机控制,变频器练习题
  9. 解决IDEA中maven项目视图中出现红色波浪线的问题
  10. wstring是什么?跟string有什么区别