ZZ自己动手写一个Spring (Spring 到底是怎么跑起来的)
来源:互联网 发布:美联储基准利率数据 编辑:程序博客网 时间:2024/04/28 19:30
看到这个标题大家可能又想:哎,又一个重新发明轮子的人。在这里很想先声明一下,写这篇文章只是想让大家了解一下Spring到底是怎么运行的,并不是想重造轮子噢,希望大家看完这篇文章后能对Spring有更深入的了解,希望这篇文章对你有所帮助喔!好,言归正传,让我们来一起探索吧!
我们先从最常见的例子开始吧
- public static void main(String[] args) {
- ApplicationContext context = new FileSystemXmlApplicationContext(
- "applicationContext.xml");
- Animal animal = (Animal) context.getBean("animal");
- animal.say();
- }
这段代码你一定很熟悉吧,不过还是让我们分析一下它吧,首先是applicationContext.xml
- <bean id="animal" class="phz.springframework.test.Cat">
- <property name="name" value="kitty" />
- </bean>
他有一个类phz.springframework.test.Cat
- public class Cat implements Animal {
- private String name;
- public void say() {
- System.out.println("I am " + name + "!");
- }
- public void setName(String name) {
- this.name = name;
- }
- }
实现了phz.springframework.test.Animal接口
- public interface Animal {
- public void say();
- }
很明显上面的代码输出I am kitty!
那么到底Spring是如何做到的呢?
接下来就让我们自己写个Spring 来看看Spring 到底是怎么运行的吧!
首先,我们定义一个Bean类,这个类用来存放一个Bean拥有的属性
一个Bean包括id,type,和Properties。
接下来Spring 就开始加载我们的配置文件了,将我们配置的信息保存在一个HashMap中,HashMap的key就是Bean 的Id ,HasMap的value是这个Bean,只有这样我们才能通过context.getBean("animal")这个方法获得Animal这个类。我们都知道Spirng可以注入基本类型,而且可以注入像List,Map这样的类型,接下来就让我们以Map为例看看Spring是怎么保存的吧
Map配置可以像下面的
Spring是怎样保存上面的配置呢?,代码如下:
接下来就进入最核心部分了,让我们看看Spring 到底是怎么依赖注入的吧,其实依赖注入的思想也很简单,它是通过反射机制实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。让我们看看具体它是怎么做的吧。
首先实例化一个类,像这样
接着它将这个类的依赖注入进去,像这样
最后它将这个类的实例返回给我们,我们就可以用了。我们还是以Map为例看看它是怎么做的,我写的代码里面是创建一个HashMap并把该HashMap注入到需要注入的类中,像这样,
好了,这样我们就可以用Spring 给我们创建的类了,是不是也不是很难啊?当然Spring能做到的远不止这些,这个示例程序仅仅提供了Spring最核心的依赖注入功能中的一部分。
本文参考了大量文章无法一一感谢,在这一起感谢,如果侵犯了你的版权深表歉意,很希望对大家有帮助!
附件中包含该山寨Spring的源码,核心只有五个类,还有一个测试程序,phz.springframework.test.AnimalSayApp,可以直接运行。
- ZZ自己动手写一个Spring (Spring 到底是怎么跑起来的)
- 主题:自己动手写一个Spring (Spring 到底是怎么跑起来的)
- 自己动手写一个Spring (Spring 到底是怎么跑起来的)
- 自己动手写一个Spring (Spring 到底是怎么跑起来的)
- Spring 到底是怎么跑起来的
- Spring @Transactional 到底是怎么工作的?
- spring - 自己动手写spring
- spring的@Transactional到底是怎么工作的
- 自己动手写spring(二) 创建一个bean工厂
- 自己动手写spring(五) bean的生命周期管理
- 自己动手写spring(一) 使用digester
- 自己动手写spring(六) 支持FactoryBean
- 自己动手写spring(八) 支持AOP
- 自己动手写spring(九) 总结
- spring MVC项目中,欢迎页首页根路径到底是怎么设置的
- spring MVC项目中,欢迎页首页根路径到底是怎么设置的
- 程序是怎么跑起来的?---(1)热身
- 程序是怎么跑起来的?(2)---2进制
- 中央政治局会议研究建立干部考核评价机制
- javascript--弹出对话框 四种对话框 获得用户输入值
- ini文件相关
- static 变量和static 函数
- 设计REST风格的Java MVC框架
- ZZ自己动手写一个Spring (Spring 到底是怎么跑起来的)
- C#中HashTable的用法
- 停止正在执行的JOB的方法
- 我的深圳面试体验--艾默生/西门子/华为/中兴/索尼/富士施乐/长城国际/ 马士基/SGS/宜家/
- 网店客服月收入最高2000元:要求不高易跳槽
- Nokia s60v5 j2me禁用softkeypad
- struts2 中 annotation的用法
- C#数据导出到Excel(或Word)源代码大全(一)
- 文本约定RowStatus(在mib中添加删除行)