什么是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的上下文中存在响应的实例,否则会进行报错