Spring核心学习(6)引用ApplicationContext-包装Bean的初始化过程,对应用透明

前导:开始学习Spring核心思想,通过一个山寨精简版Spring代码结合学习。

这是IOC的最终版本,在这里我们将BeanFactory包装了起来,让流程能真正的像Spring那样简单。我们新定义了一个接口去继承BeanFactory,然后通过组合的方式将AbstractBeanFactory添加进来,最后的ClassPathXmlApplicationContext类将真正的把Bean的建立,组装都完成。

IOC的收获:框架开发思想:在代码实现中,配置和逻辑要有明确的分水岭:1. XML=>BeanDefinition=>BeanFactory=>Bean;

2. XML=>PropertyValue=>AutowireCapableBeanFactory=>注入Bean。

这里给出完成代码:项目地址

时间: 2024-11-07 20:42:54

Spring核心学习(6)引用ApplicationContext-包装Bean的初始化过程,对应用透明的相关文章

Spring核心学习(5)将Bean注入Bean-解析依赖

前导:开始学习Spring核心思想,通过一个山寨精简版Spring代码结合学习. 内容:1. BeanReference-保存Bean的引用. 2. getBean()中调用createBean()-lazy-init.这次我们用到了在Bean中注入Bean的情况,在这里我们再一次改写了AbstractBeanFactory,改写后的AbstractBeanFactory将多出一个List来保存所有注册的对象名,而且我们不再是注册时候就创建bean,并将beanDefinition的bean注入

Spring核心学习(3)为Bean注入属性

前导:开始学习Spring核心思想,通过一个山寨精简版Spring代码结合学习. 内容:1.Propertyvalue-保存属性注入信息.2.AutowireCapableBeanFactory-可自动装配的BeanFactory. 这里我们重新定义了BeanDefinition,增加了属性列表这个字段,我们将为bean附加额外的属性,所以我们又定了PropertyValues.PropertyValue来辅助,当我们为bean定义的时候同时设置他的属性,通过反射机制来动态的附加到bean里,来

Spring核心学习(2)管理Bean的生命周期

前导:开始学习Spring核心思想,通过一个山寨精简版Spriing代码结合学习. 内容:1. 抽象BeanFactory-面向接口更易拓展BeanFactory-面向接口更易拓展. 2. 在AbstractBeanFactory内部初始化Bean. 这里的BeanDefinition相比上一个更加丰富,多了BeanDefinition包含的Bean的Class的信息,这里我们不在注册前就把Bean实例化给BeanDefinition,而是延迟到注册的时候才实例化Bean给BeanDefinit

Spring核心学习(1)实现基本的容器-包括注入和获取功能

前导:开始学习Spring核心思想,通过一个山寨精简版Spriing代码结合学习. 内容:1. BeanDefinition-保存Bean及配置信息 2. BeanFactory-对Bean进行管理. BeanDefinition: public class BeanDefinition { private Object bean; public BeanDefinition(Object object) { this.bean = object; } public Object getBean

Spring核心学习(4)从XML中读取BeanDefinition-将代码变成配置

前导:开始学习Spring核心思想,通过一个山寨精简版Spring代码结合学习. 内容:1. BeanDefinitionReader-配置读取者. 2. XmlBeanDefinitionReader-从XML中读取配置. 3. Resource-定位资源文件.这次将Bean的配置信息都放到了XML里,所以这里会有一个XML文件的读取,我们通过XmlBeanDefinitionReader将XML中的信息组装好成BeanDefinition放到一个Map里,这样我们就能真正做到像Spring那

Spring核心学习-AOP(7) 织入和代理

前导:开始学习Spring核心思想,通过一个山寨精简版Spring代码结合学习. AdvisedSupport - 保存AOP配置 TargetSource - 保存被代理的数据 AopProxy - 对代理对象做代理,在调用目标方法前先调用它. JdkDynamicAopProxy - 使用JDK动态代理对接口做代理 ReflectiveMethodInvocation - 将反射的Method封装为Joinpoint MethodInterceptor - 对方法调用连接点实现包围通知的 A

Android(java)学习笔记159:Dalivk虚拟机的初始化过程

1.初始化下面系统函数(调用dvmStartup函数初始化所有相关的函数) 开始学习虚拟机的初始化过程,先从dvmStartup函数开始,这个函数实现所有开始虚拟机的准备工作: dvmAllocTrackerStartup函数初始化跟踪显示系统,跟踪系统主要用生成调试系统的数据包. dvmGcStartup函数是用来初始化垃圾回收器. dvmThreadStartup函数是初始化线程列表和主线程环境参数. dvmInlineNativeStartup函数是分配内部操作方法的表格内存. dvmVe

Spring入门学习(二)三种实例化bean的方法

前面的哪一种就是通过构造函数来实例化对象 下面我们可能用到工厂方法来视力话对象,这样我们的配置文件又该怎么配置呢 <bean name="service2" class="com.factory.ServiceFactory" factory-method="getService"></bean> 1 package com.factory; 2 3 import com.service.Service; 4 import

看看Spring的源码(一)——Bean加载过程

首先Web项目使用Spring是通过在web.xml里面配置org.springframework.web.context.ContextLoaderListener初始化IOC容器的. <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 那就以此为切入点顺藤摸瓜. public class