最近闲着无聊,又把ioc梳理了一遍,一边看一边满脑子是王宝强的“啥啥啥,这又是个啥”的表情包。
一会注入、一会依赖、一会又自动装配的……哎……还好有了点头绪。
ioc的概念 |
1、ioc是什么?有什么用?
老生常谈,ioc是控制反转,控制的是bean的生命周期,反转的是将对象的控制权由调用方交给了ioc容器。
主要的作用就是解耦。
2、对象、ioc容器、bean之间的关系?
在ioc容器里的对象就叫做bean,bean和普通对象相比,新增了作用域等属性。不过我看一般java bean、java 对象、bean对象,说啥的都有,所以看来也没必要区分。
bean的生产 |
1、ioc 容器做了哪些工作?
ioc容器就是一个生产bean的工厂,“原材料”是bean的名称,“产出”是可以被直接使用的bean。其工作主要分为两部分:
(1)容器启动阶段:加载和解析配置文件,保存到对应的bean定义中
(2)bean实例化阶段:实例化对象等。
2、bean的生命周期?
(1)实例化
将类实例化成对象,比如 Car car=new Car();
(2)属性赋值
又叫依赖注入。属性赋值主要有两种方式:setter方法、构造方法。
//使用get/set里的set方法:
public class Car{
private String color;
public void setColor(String color) {
this.color = color;
}
}
//使用构造方法:
public class Car {
private String color;
public Car(String color) {
this.color = color;
}
}
(3)初始化
没看明白这部分具体干了点啥。反正自从经历过这步之后,bean就可以使用了。
(4)使用
(5)销毁
bean的使用 |
这部分讲的是spring如何配置,才能使用到ioc容器里的bean。
(1)引入依赖:在pom文件中添加依赖。
(2)开启自动扫描功能。
开启后,会自动扫描指定的包下的所有类,如果类上使用了@Component等定义bean的注解,就将该类装配到容器中
//spring中
@Configuration
@ComponentScan(basePackages = "com.cn.config")
//Springboot中可以简化为:
@SpringBootApplication
(3)使用注解定义bean。
这4个都可以:@Controller、@Service、@Repository、@Component
(4)自动装配。
@Autowired:
- 默认是根据类型装配,如果想根据名称装配,需要配合@Qualifier一起使用
- 其有一个required属性,默认是true,表示在注入的时候,要求被注入的bean是必须存在的,如果不存在会报错。
@Resource:
- 默认根据名字装配,没有指定名称时会把属性名当做名称。根据名称找不到时,才会按类型装配。
- 按类型装配时,某种类型的bean只能有一个
(5)装配完后就可以使用了。
仅为个人见解,如有不足,欢迎讨论👏🏻