《step5:tiny-spring-ioc学习五》——ApplicationContext登场
来源:互联网 发布:java或且非符号 编辑:程序博客网 时间:2024/06/17 05:23
首先可以看一下咱们在前4篇博客的基础上初始化bean并获取bean对象的代码:
//1.读取配置XmlBeanDefinitionReaderxmlBeanDefinitionReader=newXmlBeanDefinitionReader(newResourceLoader());xmlBeanDefinitionReader.loadBeanDefinitions("tinyioc.xml");//2.初始化BeanFactory并注册beanAbstractBeanFactorybeanFactory=newAutowireCapableBeanFactory();for(Map.Entry<String,BeanDefinition>beanDefinitionEntry:xmlBeanDefinitionReader.getRegistry().entrySet()){beanFactory.registerBeanDefinition(beanDefinitionEntry.getKey(),beanDefinitionEntry.getValue());}//3.获取beanHelloWorldServicehelloWorldService=(HelloWorldService)beanFactory.getBean("helloWorldService");helloWorldService.helloWorld();
简单总结一下就是通过读取xml配置文件,完成bean类的初始化工作,然后再获取bean对象的方法等。
在现在的开发过程中,好像很少看到这样的代码对不对?在没有spirng注解和set注入bean的情况下,我们获取bean好像都是这么获取的:
ApplicationContextapplicationContext=newClassPathXmlApplicationContext("tinyioc.xml");HelloWorldServicehelloWorldService=(HelloWorldService)applicationContext.getBean("helloWorldService");helloWorldService.helloWorld();
现在对比两段代码发现区别了吧!现在看第二段代码是不是特别熟悉?
下边就是ioc引入application的过程。
于是我们引入熟悉的ApplicationContext接口,并在AbstractApplicationContext的refresh()方法中进行bean的初始化工作。
- 类图
- 时序图
- 关键代码(在前一篇博客的基础之上)
3·1 接口ApplicationContext:
package us.codecraft.tinyioc.context;import us.codecraft.tinyioc.beans.factory.BeanFactory;/** * @author */public interface ApplicationContext extends BeanFactory {}
3·2抽象类AbstractApplicationContext:
package us.codecraft.tinyioc.context;import us.codecraft.tinyioc.beans.factory.AbstractBeanFactory;/** * @author yihua.huang@dianping.com */public abstract class AbstractApplicationContext implements ApplicationContext { protected AbstractBeanFactory beanFactory; public AbstractApplicationContext(AbstractBeanFactory beanFactory) { this.beanFactory = beanFactory; } public void refresh() throws Exception{ } @Override public Object getBean(String name) throws Exception { return beanFactory.getBean(name); }}
3·3实现类ClassPathXmlApplicationContext:
package us.codecraft.tinyioc.context;import us.codecraft.tinyioc.beans.BeanDefinition;import us.codecraft.tinyioc.beans.factory.AbstractBeanFactory;import us.codecraft.tinyioc.beans.factory.AutowireCapableBeanFactory;import us.codecraft.tinyioc.beans.io.ResourceLoader;import us.codecraft.tinyioc.beans.xml.XmlBeanDefinitionReader;import java.util.Map;/** * @author yihua.huang@dianping.com */public class ClassPathXmlApplicationContext extends AbstractApplicationContext { private String configLocation; public ClassPathXmlApplicationContext(String configLocation) throws Exception { this(configLocation, new AutowireCapableBeanFactory()); } public ClassPathXmlApplicationContext(String configLocation, AbstractBeanFactory beanFactory) throws Exception { super(beanFactory); this.configLocation = configLocation; refresh(); } @Override public void refresh() throws Exception { XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(new ResourceLoader()); xmlBeanDefinitionReader.loadBeanDefinitions(configLocation); for (Map.Entry<String, BeanDefinition> beanDefinitionEntry : xmlBeanDefinitionReader.getRegistry().entrySet()) { beanFactory.registerBeanDefinition(beanDefinitionEntry.getKey(), beanDefinitionEntry.getValue()); } }}
3·4 测试类ApplicationContexxtTest:
package us.codecraft.tinyioc.context;import org.junit.Test;import us.codecraft.tinyioc.HelloWorldService;/** * @author yihua.huang@dianping.com */public class ApplicationContextTest { @Test public void test() throws Exception { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("tinyioc.xml"); HelloWorldService helloWorldService = (HelloWorldService) applicationContext.getBean("helloWorldService"); helloWorldService.helloWorld(); }}
以上是该部分内容的关键代码,完整代码请点击《下载》
- 总结
至此为止,我们的的tiny-spring的IoC部分可说完工了。这部分的类、方法命名和作用,都是对应Spring中相应的组件。虽然代码量只有400多行,但是已经有了基本的IoC功能!
自总:
这个学习tiny-spring的过程中,对于spring的ioc容器有了进一步的了解。接下来,便是tiny-spring和spring的真实映射了。包括xml配置到注解的发展变化等。## 标题 ##
阅读全文
0 0
- 《step5:tiny-spring-ioc学习五》——ApplicationContext登场
- Spring IoC——ApplicationContext示例
- 【深入Spring】——Tiny Spring IoC(一)Bean
- 【深入Spring】——Tiny Spring IoC(二)BeanClass
- 【深入Spring】——Tiny Spring IoC(三)PropertyValues
- 《step1:tiny Spring IoC学习一》——最基本的容器BeanFactory
- 《step2:tiny Spring IoC学习二》——将bean创建放入工厂
- 《step3:tiny-Spring-IoC学习三》——为bean注入属性
- 《step4:tiny-spring-ioc学习四》——读取xml配置来初始化bean
- Spring揭秘(六)——Spring IoC容器ApplicationContext
- Spring揭秘 学习笔记三 (Spring的IoC容器 ApplicationContext)
- Spring源码学习-2.IOC-ApplicationContext资源定位
- Spring学习之IOC容器BeanFactory和ApplicationContext(三)
- spring IOC BeanFactory和ApplicationContext
- 简易Spring IOC的实现 tiny spring
- 小读spring ioc源码(五)——BeanDefinitionDocumentReader
- spring 学习1——理解IOC
- Spring源码学习 ------ IoC——AOP
- JavaScript
- MySQL 初识
- 欢迎使用CSDN-markdown编辑器
- hadoop MapReduce序列化
- 关于@requestMapping跳转页面静态资源无法加载问题
- 《step5:tiny-spring-ioc学习五》——ApplicationContext登场
- apue 函数原型 ---线程
- JDK和CGLIB生成动态代理类的区别。
- 线程:死锁
- 7、线程并发库
- ios AudioUnit 录制播放 pcm
- LeetCode ( Minimum Depth of Binary Tree)
- Kotlin数据类(八)
- JavaScript中i.toString(16)的理解,Number.prototype.toString