Spring源码深度解析-2、IOC容器的设计

前言

前面暂时结束jvm与java基础的整理,今天开始整理spring的内容。

demo

先从一个demo开始,最开始学spring,大家都写过这样的demo。

//实体类
package com.ycf.test;

public class User {
	private String userName;
	private int userAge;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public int getUserAge() {
		return userAge;
	}
	public void setUserAge(int userAge) {
		this.userAge = userAge;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return String.format("userName:%s,userAge:%s", userName,userAge);
	}

}

//xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<beans   xmlns="http://www.springframework.org/schema/beans" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
         
   <bean id="user" class="com.ycf.test.User">
   	 <property name="userName" value="ycf"/>
   	  <property name="userAge" value="20"/>
   </bean>
</beans>
//spring demo代码
public class SpringTest {
	public static void main(String[] args) {
		//加载bean.xml,初始化容器
		ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
		//从容器中获取bean对象
		System.out.println(context.getBean("user"));
	}
}
输出:
userName:ycf,userAge:20

spring最核心的内容就是IOC与AOP,今天先从容器讲起,如上的案例代码,可以看到我们使用了ApplicationContext这个Spring容器来初始化和加载bean对象,spring中有一系列的IOC容器,为了方便后面的学习,下面就来介绍下。

容器设计

在这里插入图片描述

下面来简单分析一下IOC容器的接口体系,结合如上的继承体系图示来分析:
1、主要设计路径:
BeanFactory -> HierarchicalBeanFactory -> ConfigurableBeanFactory
BeanFactory 定义基本的容器方法,比如getBean()
HierarchicalBeanFactory 继承BeanFactory ,并增加了获取双亲IOC容器的方法,getParentBeanFactory()
ConfigurableBeanFactory 继承HierarchicalBeanFactory ,并增加了设置双亲IOC容器的方法(void setParentBeanFactory(BeanFactory parentBeanFactory))以及设置bean的后置处理器方法(addBeanPostProcessor)。

2、第二条设计路径:
BeanFactory -> ListableBeanFactory -> ApplicationContext

-> WebApplicationContext
或者
->ConfigurableApplicationContext

ListableBeanFactory 继承自BeanFactory,增加了 getBeanDefinationsName等方法。
ApplicationContext 继承自ListableBeanFactory ,还继承HierarchicalBeanFactory、ResourceLoader、MessageSource【消息处理】、ApplicationEventPulisher【spring的发布消息、监听事件机制】等接口。

-> WebApplicationContext
或者
->ConfigurableApplicationContext
是常用的应用上下文。

注意综上:

其他IOC容器,继承自DefaultListableBeanFactory,DefaultListableBeanFactory则继承自ListableBeanFactory
ApplicationContext继承自ListableBeanFactory ,还继承HierarchicalBeanFactory、ResourceLoader,MessageSource,ApplicationEventPulisher等接口,使其具有更高的IOC特性。

猜你喜欢

转载自blog.csdn.net/qq_28605513/article/details/85270792