
什么是IOC?
控制反转,依赖注入
控制什么
控制对象的创建和销毁
反转什么
将对象的控制权交给Ioc容器
Bean的实例化
1.通过默认构造方法实例化Bean
![]()
2.通过静态工厂方法实例化Bean
![]()
3.通过实例工厂方法实例化Bean

4.Bean的别名
![]()
Bean的注入方式(DI)

构造方法

简写:

set方法

ref指向BeanID,value赋予简单值
简写

集合类型


注入null值

注入内部Bean

Bean作用域

Singleton作用域(单例模式)

只有一个实例Bean对象,会被多个线程反复修改,所以它线程不安全
Prototype作用域(多例模式)

每个线程都会new一个实例,线程之间不影响,所以线程安全
Bean依赖

Web环境作用域
request作用域:每个request请求都会创建一个单独的实例。
session作用域:每个session都会创建一个单独的实例
Bean的懒加载
默认情况下,Spring容器会在创建容器时提前初始化Singleton作用域的bean。如果开启了懒加载,Bean被标注了lazy-init="true",则该Bean只有在其被需要的时候才会被初始化。
注意:只对Singleton单例作用域的Bean有效
1.为某个Bean设定懒加载
![]()
2.为所有的Bean设定懒加载(配置文件最外层的beans标签中)

适用场景:如果某个Bean在程序整个运行周期都可能不会被使用,那么可以考虑设定该Bean为懒加载。
优点:尽可能的节省了资源
缺点:可能会导致某个操作响应的时间增加
Bean的初始化和销毁
Bean初始化
如果需要在Bean实例化之后执行一些逻辑,有两种方法:
1.使用init-method

2.让Bean实现InitializingBean接口

Bean销毁
如果需要在Bean销毁之前执行一些逻辑,有两种方法:
1.使用destory-method

2.让Bean实现DisposableBean接口

SpringIoC注解
通过注解取代xml配置

@Component 通用型注解 只能指向一个BeanId
@Component("bean","bean2") 设置Bean别名

通过构造方法和Set方法注入Bean
在方法上加@Autowired注解,注意保证在方法中的每一个参数都在Spring的上下文中存在响应的实例,否则会进行报错

通过属性直接注入Bean

实例化和注入式指定Bean的id

将多个泛型实例注入到List/Set


String、Integer等类型直接赋值

SpringIoC容器内置接口实例注入

通过注解设定Bean的作用域 @Scope

通过注解开启Bean的懒加载 @Lazy

通过注解编写Bean初始化及销毁











