spring分析

199 阅读1分钟
spring -> springboot -> springcloud
spring 框架 生态 扩展性
spring 
	ioc
		IOC控制反转   DI依赖注入
	aop
	ioc容器 -> 对象 bean
	<beans>
		<bean id=? class=? abstract init-method scope dependon...>
			<property name=? value=?/>
			<property name=? ref=?/>
		</bean>
		<bean id=? class=? abstract init-method scope dependon...>
			<constructor-arg name=? value=?/>
			<constructor-arg name=? ref=?/>
		</bean>
	</beans>
	ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
	XXX xxx = ac.getBean(XXX.class);
	xxx.method();
	加载 -> 解析xml -> 封装BeanDefinition -> 实例化 -> 放到容器中 -> 从容器中获取
	容器 -> Map 
	在容器创建过程中需要动态的改变bean的信息怎么办
		<property name=url value=${jdbc.url}>
		如果想随时修改beanDefinition怎么办?
		postProcessor 后置处理器 增强器
			BeanFactoryPostProcessor -> 增强BeanDefinition信息
			BeanPostProcessor -> 增强Bean信息
	创建对象
		实例化 -> 在堆中开辟一块空间 -> 对象的属性值都是默认值
		初始化 -> 给属性设置值 -> 填充属性
							   -> 执行初始化方法 -> init-method
	实例化 -> 【填充属性(populate)-> 设置aware接口的属性 -> BeanPostProcessor.before -> 执行init-method方法 -> BeanPostProcessor.after】初始化环节 -> 完整对象 -> context.getBean
	Aware接口到底是什么作用?
		当spring容器创建的bean对象在进行具体操作的时候,如果需要容器的其他对象,此时可以将对象实现aware接口,来满足当前的需要
	在不同的阶段要处理不同的工作,应该怎么办?
		观察者模式:监听器,监听事件,多播器(广播器)
	AbstractApplicationContext refresh()中的13个方法
		prepareRefresh() 做容器刷新前的准备工作
			1.设置容器的启动时间
			2.设置活跃状态为true
			3.设置关闭状态为false
			4.获取Environment对象,并加载当前系统的属性值到Environment对象中
			5.准备监听器和事件的集合对象,默认为空的集合
		ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
			创建容器对象:DefaultListableBeanFactory
			加载xml配置文件的属性值到当前工厂中,最重要的就是BeanDefinition
		prepareBeanFactory(beanFactory)