ioc
jackson陈
这个作者很懒,什么都没留下…
展开
-
spring4.2.9 java项目环境下ioc源码分析(一)——执行refresh之前
本系列文章讲述spring IOC容器如何加载Bean与实例化Bean以及其中所穿插的一些实现。本文章以ClassPathXmlApplicationContext为起点,debug启动流程。代码如下public static void main(String[] args) {ClassPathXmlApplicationContext context= new ClassPat...原创 2018-04-04 13:15:56 · 682 阅读 · 1 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十四)——refresh之onRefresh方法
这个方法是空的。解释是在特定的上下文中初始化特别的beans。可以看到其也是用于初始化的。看了StaticWebApplicationContext、AbstractRefreshableWebApplicationContext、GenericWebApplicationContext的实现都是一样的代码用于初始化主题。略过。。。。。...原创 2018-05-07 16:27:25 · 1115 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十三)——refresh之initApplicationEventMulticaster方法
初始化应用事件广播器。这事观察者模式得典型应用。我们知道观察者模式由主题Subject和Observer组成。广播器相当于主题Subject,其包含多个监听器。当主题发生变化时会通知所有得监听器。代码很简单protected void initApplicationEventMulticaster() { ConfigurableListableBeanFactory beanFactory ...原创 2018-05-07 16:17:44 · 1492 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十)——refresh之invokeBeanFactoryPostProcessors方法
invokeBeanFactoryPostProcessors执行BeanFactory后置处理器,当然前提是你已经在容器中注册过此处理器了。protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) { PostProcessorRegistrationDelegate...原创 2018-04-28 16:14:22 · 1757 阅读 · 2 评论 -
spring4.2.9 java项目环境下ioc源码分析 (九)——refresh之postProcessBeanFactory方法
postProcessBeanFactory后处理beanFactory。时机是在所有的beanDenifition加载完成之后,bean实例化之前执行。比如,在beanfactory加载完成所有的bean后,想修改其中某个bean的定义,或者对beanFactory做一些其他的配置,就可以用此方法。在系列文章中,可以实现ClassPathXmlApplicationContext类并重写post...原创 2018-04-28 13:49:46 · 3376 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析(八)——refresh之prepareBeanFactory方法
在完成解析,把所有的BeanDenifition注册到bean工厂完成后,开始执行prepareBeanFactory方法。这个方法是配置工厂的标准上下文特征。具体看代码 protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { //设置beanFactory的classLoader为当前c...原创 2018-04-28 10:45:37 · 1032 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析(七)——refresh之obtainFreshBeanFactory方法(@5自定义标签解析)
接下来我们看下bean是默认标签的情况spring是怎么解析的。首先我们先自己做一个自定义标签。然后具体分析下面列出步骤1、定义javabean2、定义一个xsd文件描述javabean的内容3、创建一个Java类继承AbstractSingleBeanDefinitionParser用来解析xml的内容4、创建一个Java类继承NamespaceHandlerSupport,实现init方法用于...原创 2018-04-27 19:44:03 · 400 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析(六)——refresh之obtainFreshBeanFactory方法(@4默认标签bean,beans解析、最终注册)
接上篇文章,解析了import和alias标签,只是开胃菜比较简单,下面介绍bean标签的加载,也是默认命名空间下解析的重点。protected void processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) { //解析bean标签,返回其包装类 BeanDefinitionHolder bdH...原创 2018-04-27 15:51:30 · 483 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析(五)——refresh之obtainFreshBeanFactory方法(@3默认标签import,alias解析)
接上篇文章,到了具体解析的时候了,具体的分为两种情况,一种是默认命名空间的标签<bean>;另一种是自定义命名空间的标签比如<context:xxx>,<tx:xxx>等。先看下默认的命名空间的标签解析。protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate d...原创 2018-04-26 17:15:50 · 401 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十二)——refresh之initMessageSource方法
国际化。。。。,我估计写的应用也不会出国了,不讲了。。。。原创 2018-05-02 15:02:27 · 440 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十一)——refresh之registerBeanPostProcessors方法
接上篇文章,registerBeanPostProcessors从名称可以看出是用来注册BeanPostProcessor的。在讲解这个方法之前先看下什么是BeanPostProcessor,下面是BeanPostProcessor的代码,可以看出只有两个方法。public interface BeanPostProcessor { Object postProcessBeforeInitia...原创 2018-05-02 13:54:21 · 1745 阅读 · 2 评论 -
spring4.2.9 java项目环境下ioc源码分析(四)——refresh之obtainFreshBeanFactory方法(@2处理Resource、加载Document及解析前准备)
接上篇文章,上篇文章讲到加载完返回Rescouce。先找到要解析的代码位置,在AbstractBeanDefinitionReader类的loadBeanDefinitions(String location, Set<Resource> actualResources)的方法中,要继续的是int loadCount = loadBeanDefinitions(resources);@...原创 2018-04-23 13:08:47 · 591 阅读 · 0 评论 -
spring4.2.9 java项目环境下ioc源码分析(三)——refresh之obtainFreshBeanFactory方法(@1准备工作与加载Resource)
obtainFreshBeanFactory方法从字面的意思看获取新的Bean工厂,实际上这是一个过程,一个加载Xml资源并解析,根据解析结果组装BeanDefinitions,然后初始化BeanFactory的过程。在加载Xml文件之前,spring还做了一些其他的工作,比如说判断是否已经存在容器,创建Beanfactory并设置忽略自动装配等等。下面结合代码具体看看1、准备工作。在spring...原创 2018-04-23 11:19:59 · 2347 阅读 · 2 评论 -
spring4.2.9 java项目环境下ioc源码分析 (十五)——refresh之registerListeners方法
注册监听器,与广播器是同时存在的。在广播器章节,spring只是初始化的广播器,但是并没有为广播器绑定Listener。Spring在此方法中进行了绑定。下面看代码protected void registerListeners() { // 和手动注册BeanPostProcess一样,可以自己通过set手动注册监听器 for (ApplicationListener<?> ...原创 2018-05-08 09:49:39 · 1425 阅读 · 1 评论