关于Java:如何将Spring的所有属性注入到bean中?

 2021-02-24 

How to inject all properties from Spring into a bean?

我想将包含spring知道的所有属性(由库插入)的映射注入到我通过spring xml获得的配置类中。那可能吗?

1
2
3
4
5
6
7
<bean class="Config">
  <constructor-arg name="env">
    <map>
    //inject all properties?
    </map>
  </constructor-arg>
</bean>

您为什么不只注入Spring Context?通过上下文,您可以通过其名称查找任何bean。

编辑:

根据此答案,您还可以使用以下内容:

1
2
3
4
5
<bean class="Config">
  <constructor-arg name="env">
    <util:properties location="${path.to.properties.file}"/>
  </constructor-arg>
</bean>

其中" env"构造函数的参数是java.util.Properties对象。


对于支持环境注入的更高版本的Spring(包括spring-boot),您可以使用它来访问所有加载的属性。

要回答此问题,请插入AbstractEnvironment,以便您可以调用getPropertySources()方法,该方法将允许您查看从中加载属性的位置(例如文件,OS变量等)。

1
2
3
4
5
6
7
@Autowired
public Config(AbstractEnvironment environment)
{
    MutablePropertySources propertySources = environment.getPropertySources();

    // inspect propertySources to see all properties loaded by Spring
}


您是否可以扩展使用的库类并实例化bean,而不是默认的库类?这样您便可以检查所有值。

否则,如果您知道库的签名,则始终可以使用AOP在库周围编织一些代码并访问那里的属性。稍微复杂一点,但仍然可以满足您的需求。您绝对可以使用AspectJ(需要更多的配置),甚至可以使用Spring AOP,这取决于事物的访问方式。

如果您想/需要更多的见解,请告诉我。