共计 923 个字符,预计需要花费 3 分钟才能阅读完成。
本文由作者张远道授权网易云社区发布。
spring 中常用 PropertyPlaceHolderConfigurer 来读取 properties 配置文件的配置信息。常用的配置方式有两种,一种是使用 location
<bean id=”property” >
<property=”location” value=”classpath:myproperty.propeties”/>
</bean>
另一种是使用 locations
<bean id=”property” <property=”locations”><list><value>classpath:myproperty.propeties</value><value>classpath:myproperty1.properties</value></list></property></bean>
查看 PropertyPlaceHolderConfigurer 的源码发现,整个 PropertyPlaceHolderConfigurer 的继承树中都没有 location 整个属性,仅仅只有 locations 这个属性。如下图所示。
因此,认为既然没有 location 这个属性,那使用时是不是不正确。但是仔细看看发现了 PropertiesLoaderSupport 中有 setLocation() 方法。
而查看 spring 有关依赖注入的源码:
即获得 property 对应的 setter 方法,以及 property 对应的值,然后通过反射,调用该方法即可。可以看出,不要求类的定义中真正包含改属性,只要对应的 setter 方法被调用即可以。因此,ioc 容器从 xml 配置中读到属性为 location 的值,然后获得 location 对应的 setter 方法,即 setLocation,然后通过反射,将 location 的值传入了 setLocation 中。如下图。
结论:location 属性没有使用错,而是 spring 根据反射调用 setLocation 方法,将 location 赋值给了 locations 了而已。
免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐
更多网易技术、产品、运营经验分享请访问网易云社区。
文章来源:网易云社区