Spring的执行顺序

1.Spring的加载(实例化)

如果不与Struts整合的话,Spring的加载是在Web程序的web.xml中配置的,在web.xml 中有两种选择,一种是ContextLoaderListener,另一种是ContextLoaderServlet。

如果与Struts进行整合,则Spring的加载是在struts-config.xml中配置的。

2.容器后处理器

在容器实例化之后可以对Spring容器进行一些操作,这个通过实现接口BeanFactoryPostProcessor接口来实现,该接口有一个方法void postProcessorBeanFactory(ConfigurableListableBeanFactory beanFactory)。这个接口有两个很有用的实现类,是Spring已经实现好的,它们是PropertyPlaceholderConfigurer(属性占位符配置器)和PropertyOverrideConfigurer(另一种属性占位符配置器)。

3.与Spring容器的交互

对容器的处理操作结束以后,我们就能和Spring容器进行交互了,我们可以实现FactoryBean,FactoryBeanAware接口等方法获取BeanFactory实例,然后用之。

4.配置bean和依赖关系

这包括配置依赖,注入属性值,注入field值,注入方法返回值,bean的继承。这些配置的过程中还包括配置强制初始化bean(depends-on),自动装配(autowire),依赖检查(dependency-check),这三项都是bean的属性(不是子元素)。

5.对容器中的bean实例化的管理——bean后处理器

bean后处理器必须实现BeanPostProcessor接口,该接口中有两个方法,一个是Object postProcessBeforeInitialization(Object bean,String name) throws BeansException 和 Object postProcessAfterInitialization(Object bean,String name) throws BeansException,前一个方法是在实例化之前对该bean进行处理,后一个方法是在实例化之后对该bean进行处理。

6.对bean生命周期的管理

对bean生命周期的管理有两个时机:一,在注入依赖关系之后;二,在即将销毁bean之前。

在注入依赖关系之后管理有两种方式:一,使用init-method属性;二,InitialingBean接口,它只有一个void afterPropertiesSet() throws Exception方法。

在bean销毁之前管理时也有两种方式:一,使用destroy-method属性;二,DisposableBean接口,它只有一个void destroy() throws Exception方法。

这里要说明的是,如果同时配了属性,也实现了方法。则先执行接口的方法,再执行配置的属性指定的方法。

如果既用了bean后处理器,有对bean的生命周期进行管理,则执行的顺序是:Object postProcessBeforeInitialization(Object bean,String name) throws BeansException,void afterPropertiesSet() throws Exception,init-method,Object postProcessAfterInitialization(Object bean,String name) throws BeansException。

7.创建bean实例

创建bean实例有三种方法:

1.调用构造器创建一个bean实例。

2.BeanFactory调用某个类的静态工厂方法创建bean。

3.BeanFactory调用实例工厂方法创建bean。

8.依赖注入

注入的顺序是先实例化本bean(它需要容器向它注入其它的bean),在实例化用来向本bean注入的bean,然后执行注入。当然,这种顺序是可以改变的,可以用强制实例化bean来改变这种顺序。强制实例化bean在前面已经说过。

注入的方式有两种,一种是设值注入,另一种是构造注入。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/

时间: 2024-11-21 00:45:21

Spring的执行顺序的相关文章

spring数据源-关于spring AbstractRoutingDataSource和切面执行顺序问题

问题描述 关于spring AbstractRoutingDataSource和切面执行顺序问题 我想spring AbstractRoutingDataSource和spring aop配合使用,达到动态切换数据源的功能.现在有一个问题是,如果我把aop before设置到service层上,发现一个请求过来会先进入spring mvc的controller,然后再进入AbstractRoutingDataSource,最后才进去aop before中,这样就导致不能在service层动态切换

javascript的执行顺序

 JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行 如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执行顺序,那你就犹如伯乐驾驭不了千里马,让千里马脱缰而出,四处乱窜.   那么JavaScript是怎么来进行解析的吗?它的执行顺序又是如何的呢?在了解这些之前,我们先来认识几个重要的术语:   1.代码块 JavaScript中的代码块是指由<script>

SQLServer中SELECT语句的执行顺序

今天在写一条语句的时候,在查询分析器里边执行 要用10s,换用另外一种写法只用少于1s的时间,同事说是因为Sql句语执行顺序的原因.之前看过一点相 关的书,有一点印象,到网上找了资料,学习下. 逻辑查询处理步骤 复制代码 代码如下: (8)SELECT (9)DISTINCT (11)<TOP_specification> <select_list> (1)FROM <left_table> (3) <join_type> JOIN <right_ta

CSS执行顺序与优先权的问题

核心提示:CSS执行顺序与优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多. CSS执行顺序与优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多. 首先就是CSS规则的specificity(特殊性),CSS2.1有一套关于specificity的计算方式,用一个四位的数字串(CSS2是三位)来表示,最终

你是否理解&amp;#106avascript的执行顺序?

执行 通常状况下,javascript作为一种解释性的脚本,都是从上而下顺序执行的,但是JavaScript还允许在其语句中嵌套,也就是这个样子: document.write("<script>alert(t);</scr"+"ipt>"); 注意:</script>不能写作</script>,要用字符串连接的形式来表述,否则会有语法错误,估计是因为JavaScript遇到</script>就以为脚本结束

Javascript在网页页面加载时的执行顺序

javascript|加载|网页|页面|执行 一.在HTML中嵌入Javasript的方法 直接在Javascript代码放在标记对<script>和</script>之间 由<script />标记的src属性制定外部的js文件 放在事件处理程序中,比如:<p >点击我</p> 作为URL的主体,这个URL使用特殊的Javascript:协议,比如:<a href="javascript:alert('我是由javascript

你是否理解JavaScript的执行顺序?

javascript|执行 通常状况下,JavaScript作为一种解释性的脚本,都是从上而下顺序执行的,但是JavaScript还允许在其语句中嵌套,也就是这个样子: document.write("<script>alert(t);</scr"+"ipt>"); 注意:</script>不能写作</script>,要用字符串连接的形式来表述,否则会有语法错误,估计是因为JavaScript遇到</script

Flash Actionscript脚本的执行顺序

脚本|执行 做了一下Flash脚本执行顺序状况的测试,总结出以下几条规则:1.先执行帧脚本,再执行该帧中的影片剪辑中帧脚本.2.同一帧中不同图层的帧脚本的执行顺序是从上层图层至下层图层;3.不同影片剪辑中的帧脚本执行顺序是根据其加载顺序来的.通常下在同一帧中不同图层内的影片剪辑脚本以自下层图层至上层图层;4.由于非脚本创建的影片剪辑最先加载,所以先执行非脚本创建的影片剪辑中的脚本,再执行由脚本创建的影片剪辑中的脚本,脚本创建的影片剪辑遵循"先创建/加载,先执行"的原则;5.非脚本创建的

Flash脚本的执行顺序

脚本|执行 做了一下Flash脚本执行顺序状况的测试,总结出以下几条规则:1.先执行帧脚本,再执行该帧中的影片剪辑中帧脚本.2.同一帧中不同图层的帧脚本的执行顺序是从上层图层至下层图层;3.不同影片剪辑中的帧脚本执行顺序是根据其加载顺序来的.通常下在同一帧中不同图层内的影片剪辑脚本以自下层图层至上层图层;4.由于非脚本创建的影片剪辑最先加载,所以先执行非脚本创建的影片剪辑中的脚本,再执行由脚本创建的影片剪辑中的脚本,脚本创建的影片剪辑遵循"先创建/加载,先执行"的原则;5.非脚本创建的