引言
小贾推荐了一个Tiny Spring给我,学习Spring源码,从简单的了解Bean,BeanDefinition和BeanFactory三者关
系开始,简单易懂,这里也以博客的形式分享给大家。
UML图
这里最关键的两个类:BeanDefinition与BeanFactory(为了简单,这里的BeanFactory为类),类图关系如下:
写了两个测试类:HelloWorldService与BeanFactoryTest,时序图如下:
由时序图可知,BeanFactory管理Bean的注入与获取,Bean的注入是由BeanDefinition的构造函数进行的,所以基
本的逻辑就很清晰了。下边看代码部分:
BeanDefinition
package us.codecraft.tinyioc;
/**
* @author yihua.huang@dianping.com
*/
public class BeanDefinition {
private Object bean;
public BeanDefinition(Object bean) {
this.bean = bean;
}
public Object getBean() {
return bean;
}
}
BeanFactory
package us.codecraft.tinyioc;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author yihua.huang@dianping.com
*/
public class BeanFactory {
private Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>();
public Object getBean(String name) {
return beanDefinitionMap.get(name).getBean();
}
public void registerBeanDefinition(String name, BeanDefinition beanDefinition) {
beanDefinitionMap.put(name, beanDefinition);
}
}
HelloWorldService
package us.codecraft.tinyioc;
/**
* @author yihua.huang@dianping.com
*/
public class HelloWorldService {
public void helloWorld(){
System.out.println("Hello World!");
}
}
BeanFactoryTest
package us.codecraft.tinyioc;
import org.junit.Test;
/**
* @author yihua.huang@dianping.com
*/
public class BeanFactoryTest {
@Test
public void test() {
// 1.初始化beanfactory
BeanFactory beanFactory = new BeanFactory();
// 2.注入bean
BeanDefinition beanDefinition = new BeanDefinition(new HelloWorldService());
beanFactory.registerBeanDefinition("helloWorldService", beanDefinition);
// 3.获取bean
HelloWorldService helloWorldService = (HelloWorldService) beanFactory.getBean("helloWorldService");
helloWorldService.helloWorld();
}
}
总结
这是最简单的demo来理解Bean、BeanDefinition与BeanFactory三者关系,稍后会陆续在此基础上丰富内容,从而
理解Spring源码部分。期待吧~