spring 是什么
spring是框架,是一个生态,具有扩展性
spring主要包含两个点IOC、AOP
IOC:控制反转,里面包含了DI依赖注入,
IOC容器是一个容器,是用来存放对象
spring 怎么通过xml获取bean
# bean.xml
<bean id=xxx class=xxx init-method=xxx>
<property name=xxx value=xxx/>
<property name=xxx ref=xxx/>
</bean>
<bean id=xxx class=xxx init-method=xxx>
<consturct-arg name=xxx value=xxx/>
<consturct-arg name=xxx ref=xxx/>
</bean>
//获取bean对象
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
XXX xxx = context.getBean(XXX.class);
xxx.getMethod();//调用某个方法
SpringIOC的原理
- 创建Beanactory, DefaultListableBeanFactory
- 加载配置文件,将配置文件的信息通过BeanDefinitionReader读取为BeanDefinition信息对象
- 然后通过BeanPsotProcess的一系列后置增强处理,常用的是PlaceHolderPostProcessor(替换占位符)
- 再通过反射的方式将BeanDefinition实例化为bean对象,这个时候仅仅是在堆中开辟了一个内存空间,对象的属性值都是默认的
- 再将bean对象进行初始化,(属性赋值、处理aware回调、beanPostProcessor的前置处理(beafore)、处理init-method的方法、处理beanPostProcessor的后置处理(after))
- 初始化完成,得到一个完整的bean,放入到容器中,供容器后续的使用getBean();
- 最终关闭容器,销毁bean对象
容器
容器使用来存储bean对象的,其本质上就是一个map,这里由三个map,存放bean对象,分别对应容器的三级缓存。
对象
对象的创建完成大致分为2步
- 实例化bean对象
在内存中开辟一块空间,对象的各个属性值都是默认的 - 初始化bean对象
给对象赋值、进行前置增强、执行init-method方法、进行后置增强
后置处理器(增强器)
主要是bean工厂的增强器,主要用来增强BeanDefinition
bean的增强器,增强bean对象
Aware接口是干嘛的
当容器创建的bean对象进行具体操作的时候,如果需要容器的其他对象,这个时候需要实现相应的Aware接口,来满足具体的需求
对象分类
- 容器对象:容器内置的对象
- 普通对象:自定义的对象
不同阶段如何知道处理不同的工作
观察者模式:主要包含监听器、监听事件、广播器
接口
- BeanFactory
- Aware
- BeanDefinition
- BeanDefinitionReader
- BeanPostProcessor
- BeanFactoryPostProcessor
- Environment
StandardEnvironment : System.getEnv()
System.getProperties()
当完成整个程序的加载之后,会运行很多系统的属性值,将其添加到当前的对象中,后续程序运行时,直接从当前对象中获取。 - FactoryBean : 提供了三个方法
- getObject()
- getObjectType()
- isSingleton()
BeanFactory 和 FactoryBean的区别
都是用来创建对象的
区别:
- BeanFactory:当使用BeanFactory进行创建时,必须要有完整的创建过程,这个过程是由Spring来管理控制的
- FactoryBean:使用FactoryBean只需要调用getObject()就可以返回具体的对象,整个对象创建过程是由自己控制的,灵活。
视频来自某码MCA系列课,需要的可加