概述
加载xml->解析xml->封装BeanDefinition->实例化->放到容器中->从容器中获取bean
中间步骤复杂是为了让spring具备扩展性
BeanDefinitionRead:对于不同格式的文件,定义好规范后,在做解析操作时,直接实现当前接口就可以了。方便扩展
scope of springbean: Singleton、prototype、request、session...
BeanFactory: The root interface for accessing a Spring bean container.
SpringBean包含:容器对象(内置对象)和普通对象(自定义对象)
在不同的阶段要处理不同的工作,应该怎么办?(观察者模式) 观察者模式:监听器, 监听事件,多播器(广播器)
接口:
BeanFactory
Aware
BeanDefinition
BeanDefinitionReader,BeanDefinitionRegistry
BeanFactoryPostProcessor
BeanPostProcessor
Environment(StandardEnviroment:System.getEnv(),System.getProperties())
FactoryBean(isSingleton,getObject,getObjectType)
BeanFactory与FactoryBean的区别? 都是用来创建对象的。当使用BeanFactory时必须要遵循完整的创建过程,这个过程是由spring来控制管理的。而使用FactoryBean只需要调用getObject就可以返回具体对象,整个对象的创建过程是由用户自己来控制的,更加灵活。
1。配置文件->BeanDefinitionReader(配置文件的阅读<拓展>)->BeanDefinition(对象的定义封装)->BeanFactoryPostProcessor(对BeanDefinition进行曾建强)->实例化(BeanFactory通过反射)(在堆中开辟空间)->(初始化开始阶段)半初始化状态进行填充属性(populate)->设置aware属性的接口->BeanPostProcessor(Before)(增强bean信息)->init method(配置文件中设置)->BeanPostProcessor(After)(初始化结束阶段)->完整对象到容器空间中(Context.getBean)
2。BeanFactory整个ioc容器的根接口,也是容器的入口
3。AbstractAutowiredCapableBeanFactory
4。DefaultListableBeanFactory
5。PostProcessor(增强器)分为BeanFactoryPostProcessor和BeanPostProcessor。
6。BeanFactoryPostProcessor增强BeanDefinition信息(假如bean的value值有链接${:类似符号,然后会进行识别进行替换(PlaceHolderConfigurerSupport))
7。BeanPostProcessor增强Bean信息(AOP)
8。BeanFactory和FactoryBean的异同点 相同点:都是用来创建对象的 不同点:当使用beanFactory时,必须遵循完整的bean创建过程,这个过程是spring控制的。而使用factoryBean的时候,只需要调用getObject就可以返回具体的对象,整个对象的创建过程都是由用户自己控制的,更加灵活(当需要的时候通过工厂的getObject进行获取,不需要遵循spring的生命周期)(对象通过实现FactoryBean接口)getObject获取方法中实例化的对象,但是当getbean参数中加&符号时,则返回的是实现factoryBean接口的对象
9。AOP通常使用代理方式实现即JDK和cglib两种方式进行实现
10。Aware接口的作用,当Spring容器创建的bean在进行具体操作的时候需要容器中的其他bean,可以实现aware接口,来满足当前需要。
11。FactoryBean:容器创建完还没有FactoryBean需要创建的对象,即调用getBean的时候才会创建,不需要遵循bean的生命周期