这些天在北京出差,项目比较紧,每天都要加班,虽然累,但同时觉得比较充实,挺好的人生体验。
今天碰到一个问题,代码如下:
<bean id="playChannel" class="com.kindroid.d3.AppServer.core.channel.iscm.PlayChannelImpl">
<property name="url" value="${stream.url}"/>
<property name="port" value="${stream.port}"/>
</bean>
结果我在PlayChannelImpl的构造函数中,使用url和port的时候,居然一直是null,这个折腾了好一会,最后做了判断可能是bean在初始化的时候,执行的顺序不同,因此找了些资料,结果如下:
第一步:执行构造函数
第二步:在有了对象之后,set property
第三步:init-method
等等.....
其实这个应该很容易想到,构造函数之前,对象都不存在,去哪里setProperty呢?犯二了
解决方法也比较简单:
用
<constructor-arg> 标签 替代<property>
constructor-arg 表示作为构造函数的参数使用