:它是在容器启动时,一次性创建了所有的Bean 。这样,在容器启动时,我们就可以发现中存在的配置错误,这样有利于检查所依赖属性是否注入 。启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了 。
相对于基本的, 唯一的不足是占用内存空间 。当应用程序配置Bean较多时,程序启动较慢 。
创建方式
通常以编程的方式被创建,还能以声明的方式创建,如使用 。
注册方式
和都支持、ssor的使用,但两者之间的区别是:需要手动注册,而则是自动注册 。
通常的实现的依赖注入
其主要实现方式有两种:依赖注入和依赖查找 。
依赖注入: 相对于IoC而言,依赖注入(DI)更加准确地描述了IoC的设计理念 。所谓依赖注入( ),即组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中 。组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系 。
依赖注入的基本原则
应用组件不应该负责查找资源或者其他依赖的协作对象 。配置对象的工作应该由IoC容器负责,“查找资源”的逻辑应该从应用组件的代码中抽取出来,交给IoC容器负责 。容器全权负责组件的装配,它会把符合依赖关系的对象通过属性(中的)或者是构造器传递给需要的对象 。
依赖注入优势
依赖注入之所以更流行是因为它是一种更可取的方式:让容器全权负责依赖查询,受管组件只需要暴露的方法或者带参数的构造器或者接口,使容器可以在初始化时组装对象的依赖关系 。其与依赖查找方式相比,主要优势为:
依赖注入实现方式
依赖注入是时下最流行的IoC实现方式,依赖注入分为接口注入( ),方法注入( )和构造器注入( )三种方式 。其中接口注入由于在灵活性和易用性比较差,现在从开始已被废弃 。
构造器依赖注入和 方法注入的区别
两种依赖方式都可以使用,构造器注入和方法注入 。最好的解决方案是用构造器参数实现强制依赖,方法实现可选依赖 。
体系架构
t 是专门为 Web 应用准备的,它允许从相对于 Web 根目录的路径中装载配置文件完成初始化工作 。从 t 中可以获得 的引用,整个 Web 应用上下文对象将作为属性放置到中,以便 Web 应用环境可以访问应用上下文 。
Bean 定义
一个 Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖 。
Bean 作用域
3 中为 Bean 定义了 5 中作用域,分别为 (单例)、(原型)、、 和,5 种作用域说明如下:
处理线程并发问题
在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在中,绝大部分Bean都可以声明为作用域,因为对一些Bean中非线程安全状态采用进行处理,解决线程安全问题 。
和线程同步机制都是为了解决多线程中相同变量的访问冲突问题 。同步机制采用了“时间换空间”的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队 。而采用了“空间换时间”的方式 。
会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突 。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了 。提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进 。
Bean 生命周期
实例化