Bean对象:在Spring中交给Spring自动创建,不需要我们手动去new,所创建的对象,都叫Bean对象。
Spring怎么知道什么对象应该交给他创建呢?类的字节码对象上有注解注释时,他所需要创建的对象,都交给spring创建。
我们知道,Spring帮我们自动创建Bean对象,那么spring底层是如何执行的呢?
1.启动SpringBoot,读取SpringBoot下字节码对象,反射找到@SpringBootApplication注解的类(启动类)。
这个类在启动时会自动:
- 1)扫描本类所在包以及子包中的类,并查找由spring容器管理的对象(@Controller,@Service,…)
- 2)进行资源的默认初始化配置(自动配置),具备配置会参考spring.factories(此文件所在的jar包
- 为spring-boot-autoconfigure-2.2.2.RELEASE.jar)。
@Component是Spring中用于描述Bean类的一个注解。通过这个注解(Spring获得去自动读取的权力,读取方法为注解底层原理)我们通过IO输入流,可以以递归的形式扫,描包内的目录读取磁盘中的字节码对象。
2.读取本类包及其子类包下的字节码对象(.class文件),通过反射,读取字节码对象信息,如果字节码对象被注解注释,那么,把这个字节码对象交给BeanFactory。
3.BeanFactory是一个接口(interface),通过BeanFactory的实现类DefaultListableBeanFactory,基于反射,创建Bean对象,传给Bean容器ApplicationContext。(当Bean对象处于即使创建,即时销毁的状态时,不传递到ApplicationContext容器)
4.ApplicationContext是一个接口(interface),通ApplicationContext的实现类AnnotationConfigApplicationContext,我们可以按场景分配Bean对象,到相应的Map集合中去,等待调用。
ApplicationContext接口继承(extends)自BeanFactory,当然也能完成相应的工作,但时ApplicationContext接口的主要作用是,为Bean对象指定作用域。
Bean对象的属性:
1,Scope(作用域):
A: Singletion(单件模式)这个作用域标识的对象具有全局唯一性。
B:prototype(多力模式)这个作用域标识是指在获取对象的时候都会创建新的对象。
2.LifeCycle(生命周期):Bean对象的生命周期是指在spring框架中对Bean对象的创建,初始化,服务(指对Bean对象的使用),及销毁Bea元素的配置中.
3.Lazy(延迟加载):
true表示创建即加载(默认为true)
false表示调用再加载。