什么是Bean
spring的概念有很多,其中最基本的一个就是Bean,那到底spring bean是什么?
Bean是Spring框架中最核心的两个概念之一(另一个是面向切面变成AOP)。是否正确的理解Bean 对掌握和高效使用Spring框架至关重要。
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有事一个什么东西?
控制反转(IoC)
控制反转英文全称:Inversion of Control,简称就是
IoC
控制反转通过依赖注入(DI:创建对象并且组装对象之间的关系,不关心对象的创建只去使用)方式实现对象之间的松耦合关系。
把创建对象的权利交给框架,依赖对象由IoC容器动态生成和依赖注入,动态绑定两者的使用关系。
在 Spring 中,类的实例化、依赖的实例化、依赖的传入都交由 Spring Bean 容器控制,而不是用new方式实例化对象、通过非构造函数方法传入依赖等常规方式。实质的控制权已经交由程序管理,而不是程序员管理,所以叫做控制反转。
依赖注入(DI)
在Spring中,我们基本不需要 new
一个类,这些都是让 Spring 去做的。Spring 启动时会把所需的类实例化成对象,如果需要依赖,则先实例化依赖,然后实例化当前类。
因为依赖必须通过构建函数传入,所以实例化时,当前类就会接收并保存所有依赖的对象。
这一步也就是所谓的依赖注入。
Bean?
至于Bean,则有几个概念:
- Bean容器(IoC容器),主要用来管理对象和依赖,以及依赖注入。
- bean是一个java对象
问题1、IoC是不是一个单例模式的对象创建工具?
Spring容器管理的bean在默认情况下是单例的,也即,一个bean只会创建一个对象,存在内置map中,之后无论获取多少次该bean,都返回同一个对象。
问题2、Spring在创建之初会根据配置文件和代码中的注释,分析哪些Bean是需要创建的,于是将该类对象创建到缓存中,当接收到前端请求就去缓存池里面找。到底是不是这么一套流程?