Spring bean 加载的先后顺序。。

qingwaxw1980 2009-12-31 06:16:10
[code=Xml]
<beans>
<bean id = "b"...>
<property name="a" ref="a"/>
</bean>
<bean id = "a".../>
<beaan>
[/code]

不能成功加载,而必须反a放到b前面,这是什么原因。

找了一些资料,也没有具体的说明。

请高手指点。

ClassPathXmlApplicationContext
...全文
13818 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyg521662120 2011-08-16
  • 打赏
  • 举报
回复
Spring默认会先初始化主调Bean 在去初始化依赖Bean 楼主上面的声明,说明你的主调Bean为A bean 依赖Bean为B Bean,那么Spring就会先去初始化A Bean ,然后注入依赖关系,在初始化B bean,默认的Spring初始化Bean为单例的,在执行完
<bean id = "b"...>
<property name="a" ref="a"/>
</bean>
之后,楼主又声明了
<bean id = "a".../>
但是A Bean之前已被初始化了,并且是单例状态的,所有就出错了
zhuyang7654321 2011-06-21
  • 打赏
  • 举报
回复
我也遇到了差不多的问题。

有一个系统,我在 WinXP + Tomcat 下,运行正常;
可是到了 Ubuntu11 + Tomcat 下,就出现了和你一样的错误提示

详见贴:【Spring——Bean的加载顺序和Tomcat有关?或者和系统有关?】

目前还没解决
bolink5 2010-01-04
  • 打赏
  • 举报
回复
与顺序是没关系的
spring加载bean 是延迟加载的
yonglin4605 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 archko 的回复:]
<beans>
  <bean id = "b"...>
  <property name="a" ref="a"/>
</bean>
  <bean id = "a".../>
<beaan>问题在于解析文件是从上至下的。所以当它解析到B。而A是不存在的。
[/Quote]

你瞎猜的吧,spring会把整个文件解析完了后才去实例化的。
qingwaxw1980 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qingwaxw1980 的回复:]
引用 7 楼 archko 的回复:
<beans>
   <bean id = "b"...>
   <property name="a" ref="a"/>
  </bean>
   <bean id = "a".../>
  <beaan>问题在于解析文件是从上至下的。所以当它解析到B。而A是不存在的。



如果是这个原因,有什么解决方法么?

注:其实我把程序置入容器中执行(WEB-APPLICATION),是没有这个问题的。

不过当我打算用TestCase时,在启动spring时,就出现了这样的错误。
[/Quote]

另外,多配置文件的话,文件引入时,就没有先后顺序么?
qingwaxw1980 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 archko 的回复:]
<beans>
  <bean id = "b"...>
  <property name="a" ref="a"/>
</bean>
  <bean id = "a".../>
<beaan>问题在于解析文件是从上至下的。所以当它解析到B。而A是不存在的。
[/Quote]


如果是这个原因,有什么解决方法么?

注:其实我把程序置入容器中执行(WEB-APPLICATION),是没有这个问题的。

不过当我打算用TestCase时,在启动spring时,就出现了这样的错误。
happygao521 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 archko 的回复:]
<beans>
  <bean id = "b"...>
  <property name="a" ref="a"/> 
</bean>
  <bean id = "a".../>
<beaan>问题在于解析文件是从上至下的。所以当它解析到B。而A是不存在的。
[/Quote]

正确
跟着Mic学架构 2010-01-01
  • 打赏
  • 举报
回复
与顺序无关啊
不过我一般都是按先后顺序写的喽
wangcong2005 2010-01-01
  • 打赏
  • 举报
回复
原因是容器对配置文件进行读取,需要顺序读取节点下的所有属性和属性名,然后根据反射技术进行对bean的实例化,在对你那个<property name="a" ref="a"/>这里有个bean为a,可是进行实例化的时候会在容器里找a这个对象,找不到则进行实例化,实例化发现 a在前面根本没有定义,报错是应该的。
archko 2010-01-01
  • 打赏
  • 举报
回复
<beans>
<bean id = "b"...>
<property name="a" ref="a"/>
</bean>
<bean id = "a".../>
<beaan>问题在于解析文件是从上至下的。所以当它解析到B。而A是不存在的。
obullxl 2010-01-01
  • 打赏
  • 举报
回复
与顺序无关的, 我觉得是其它的原因.
hurongxiang0718 2010-01-01
  • 打赏
  • 举报
回复
没先后顺序。
LZ说的,没遇到过哦。
SambaGao 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhangjihao 的回复:]
spring初始化bean的时区有两种,一种是在容器启动时全部实例化,一种是在使用的时候具体实例化(也称延迟加载)。尚没证明延迟加载与xml标定顺序有关。
[/Quote]
..
HaiKe_F16 2010-01-01
  • 打赏
  • 举报
回复
顶,学习。
howsun_zh 2009-12-31
  • 打赏
  • 举报
回复
spring初始化bean的时区有两种,一种是在容器启动时全部实例化,一种是在使用的时候具体实例化(也称延迟加载)。尚没证明延迟加载与xml标定顺序有关。
Fallen934985 2009-12-31
  • 打赏
  • 举报
回复
应该不会出现这问题吧,,我都是随便放,没先后顺序,,,
qingwaxw1980 2009-12-31
  • 打赏
  • 举报
回复
我也是第一次碰到这情况。。。
临远 2009-12-31
  • 打赏
  • 举报
回复
没遇到过。

spring里bean的顺序是可以随意放的。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧