Java Spring如何在内存中加载属性文件?
我对春天真的很陌生,所以请不要生气,暂时忍受我 我试图理解Java Spring如何在内存中加载属性文件?,java,spring,Java,Spring,我对春天真的很陌生,所以请不要生气,暂时忍受我 我试图理解application.properties或任何其他外部配置文件值是如何与提到配置文件的键(value=“${log4j.configuration}”)从文件本身使用其值的位置相关联的 例如,下面是spring bean xml文件: <bean id = "propertiesToBeTaken" class="org.springframework.beans.factory.config.PropertyPlace
application.properties
或任何其他外部配置文件值是如何与提到配置文件的键(value=“${log4j.configuration}”
)从文件本身使用其值的位置相关联的
例如,下面是spring bean xml文件:
<bean id = "propertiesToBeTaken"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:application.properties</value>
<value>classpath*:*keys.properties</value>
</list>
</property>
</bean>
<bean id="log4jLoader" class="my.loader.Log4jLoader">
<property name="log4jCongif" value="${log4j.configuration}" />
</bean>
classpath*:application.properties
classpath*:*keys.properties
如您所见,propertiesToBeTaken
是类org.springframework.beans.factory.config.propertyplaceholderconfigure
的一个实例
在第二种情况下,log4jLoader
是类my.loader.log4jLoader
的实例,其中log4j.configuration
键的值被分配给log4jLoader类的实例变量log4jCongif
我的问题如下:
属性PlaceHolderConfigure
中没有位置
变量,那么位置
在这里和它的来源是什么?如何将位置
与类的实例propertiesToBeTaken
关联application.properties
键值对被加载到内存中,那么谁或我指的是哪个方法加载它?即使它被加载,那么application.properties
文件的键值对是如何被Log4jLoader
的实例变量访问的呢log4jLoader
中,有一个setLog4jConfig(String log4jpropertiesLocation)
,但我真的看不出是谁在调用这个方法。请在这里纠正我,这不是真的,在spring中,我们创建的对象bean会自动调用类的实例方法。正确的?我需要搜索更多的代码。对吗谢谢回答您的问题:
locations
是指PropertiesLoaderSupport
类的setLocations
方法,该类设置要加载的属性文件的位置PropertiesLoaderSupport
是多级继承中PropertyPlaceHolderConfigure的父类。看PropertyPlaceHolderConfigure
时,这些属性在bean中设置,现在配置XML中的任何其他bean都使用${key.name}
请求属性值,Spring从具有该键值的bean中注入值。在您的情况下,Log4jLoader
需要${log4j.configuration}
,因此它的值将由PropertyPlaceHolderConfiguraer
或它的任何父类注入setLog4jConfig
spring在必须为类Log4jLoader
的属性之一赋值时调用此方法。在您的情况下,由于
配置,spring将调用属性log4jCongif
的setter方法来注入值Yesspring可以根据配置调用实例方法(特别是setter)回答你的问题:
locations
是指PropertiesLoaderSupport
类的setLocations
方法,该类设置要加载的属性文件的位置PropertiesLoaderSupport
是多级继承中PropertyPlaceHolderConfigure的父类。看PropertyPlaceHolderConfigure
时,这些属性在bean中设置,现在配置XML中的任何其他bean都使用${key.name}
请求属性值,Spring从具有该键值的bean中注入值。在您的情况下,Log4jLoader
需要${log4j.configuration}
,因此它的值将由PropertyPlaceHolderConfiguraer
或它的任何父类注入setLog4jConfig
spring在必须为类Log4jLoader
的属性之一赋值时调用此方法。在您的情况下,由于
配置,spring将调用属性log4jCongif
的setter方法来注入值Yesspring可以根据配置调用实例方法(特别是setter)@莱尼:这是否澄清了你的疑虑?是的,我现在得到了东西。。。!但是告诉我一件事,你怎么知道地点指的是集合地点?其次,每当我们使用spring框架时,应该首先实例化与spring相关的代码或配置,因为它们的值被进一步注入要使用的代码中。。。?我的意思是什么是流量,谁来管理这个流量?Spring本身就是一个核心java。。!太多的问题,对于大多数问题,答案是Spring的IoC容器做了这些事情。如果你认为自己对所问问题的怀疑是明确的,那么你可以接受答案,这样也可以帮助其他人。@Lenny这能澄清你的怀疑吗?是的,我现在明白了。。。!但是告诉我一件事,你怎么知道地点指的是集合地点?其次,每当我们使用spring框架时,应该首先实例化与spring相关的代码或配置,因为它们的值被进一步注入要使用的代码中。。。?我的意思是什么是流量,谁来管理这个流量?Spring本身就是一个核心java。。!太多的问题,对于大多数问题,答案是Spring的IoC容器做了这些事情。如果你认为你的怀疑很清楚