今天开始每天都会抽出三个番茄来学习tiny-spring,从而达到对spring核心源码的理解,今天第一天,总结一下step1
首先定义两个类,类图如下:
BeanDefinition
public class BeanDefinition {
//对对象进行定义
private Object bean;
public BeanDefinition(Object bean){
this.bean=bean;
}
public Object getBean(){
return bean;
}
}
BeanFactory
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);
}
}
测试类:
public class HelloWorldService {
public void HelloWorld(){
System.out.println("Hello World!");
}
}
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();
}
}
输出结果
这里的BeanFactory就是一个简易的Ioc容器,首先一个对象需要在BeanDefinition中进行包装,包装的时候直接初始化好对象传到BeanDefinition中,也就是
BeanDefinition beanDefinition=new BeanDefinition(new HelloWorldService())
然后在BeanFactory中得到被包装好的bean,存入map中,在测试类中,我们就可以直接通过BeanFactory拿到这个类的对象。
下一篇博客,会总结step2,主要针对的是BeanDefinition获取注入类对象的方式
That’s All!
P.S 今天1024,和小张哥跑了10.24公里,他说要庆祝一下,累到腿软!~