Spring IOC 的核心源码,快速入门控制反转
一、基于XML(现主流使用基于注解,这个略讲)
- IOC 容器加载的时候,会自动读取 spring.xml
- 通过 XML 解析,获取到目标数据
- 通过反射机制,创建目标 bean
- 将这些 bean 注入到 IoC 缓存中,以 key-value 的形式进行存储
- 开发者只需要通过 key/Class 从缓存中取出 bean 使用即可
二、基于注解(超级方便,原理与基于XML其实差不多)
- 在需要注入的 IoC 的类处添加注解,标注一下,告诉 Spring 框架,这个类是需要注入的 bean。
- 加载 IoC 容器,Spring 框架会自动读取到所有添加了注解的类,通过反射机制创建 bean,注入到 IoC 容器中,指定要扫描的包。
package com.sample.entity;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Data
@Component
public class User{
@Value("1")
private Integer id;
@Value("张三")
private String name;
@Value("20")
private Integer age;
}
- 判断这些类是否添加了 @Component,把所有添加了 @Component 注解的类进行数据收集(beanId、className),存入集合中
package com.sample.test;
import com.sample.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext ioc = new AnnotationConfigApplicationContext("com.sample.entity");
User bean = ioc.getBean(User.class);
System.out.println(bean);
}
}
总结
IOC 控制反转,将对象的创建权力进行反转,交给 IOC 容器,而不是开发者,开发者直接使用 IOC 创建的对象进行操作即可。