我想将包含 spring 知道的所有属性(由库插入)的映射注入到我通过 spring xml 拥有的配置类中。那可能吗?
<bean class="Config">
<constructor-arg name="env">
<map>
//inject all properties?
</map>
</constructor-arg>
</bean>
为什么不直接注入 Spring Context?通过 Context,您可以通过名称查找任何 bean。
编辑:
从这个答案中,您还可以使用以下内容:
<bean class="Config">
<constructor-arg name="env">
<util:properties location="${path.to.properties.file}"/>
</constructor-arg>
</bean>
您的“env”构造函数参数是 java.util.Properties 对象。
您不能扩展您使用的库类并实例化您的 bean 而不是默认库类吗?然后您将能够检查所有值。
否则,如果您知道库的签名,您总是可以使用 AOP 在库周围编织一些代码并访问那里的属性。有点复杂,但仍然可以让你到达你需要去的地方。您绝对可以使用AspectJ(需要更多配置)甚至Spring AOP,具体取决于访问方式。
如果您想/需要对此有更多了解,请告诉我。
对于支持环境注入的更高版本的 Spring(包括 spring-boot),您可以使用它来访问所有加载的属性。
要回答这个问题,请注入 aAbstractEnvironment
以便您能够调用 getPropertySources() 方法,该方法将允许您查看从何处加载属性(例如文件、操作系统变量等)
@Autowired
public Config(AbstractEnvironment environment)
{
MutablePropertySources propertySources = environment.getPropertySources();
// inspect propertySources to see all properties loaded by Spring
}