Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringMVC4中设置全局配置/变量?_Java_Spring_Spring Mvc - Fatal编程技术网

Java 如何在SpringMVC4中设置全局配置/变量?

Java 如何在SpringMVC4中设置全局配置/变量?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我使用的是SpringMVC4.1.4 我有一些全局设置要在整个应用程序中共享 只有在启动服务器时才应加载这些设置 我知道我可以使用上下文参数 <context-param> <param-name>configA</param-name> <param-value>valueA</param-value> </context-param> <context-param> <para

我使用的是SpringMVC4.1.4

我有一些全局设置要在整个应用程序中共享

只有在启动服务器时才应加载这些设置

我知道我可以使用上下文参数

<context-param>
    <param-name>configA</param-name>
    <param-value>valueA</param-value>
</context-param>
<context-param>
    <param-name>configB</param-name>
    <param-value>valueB</param-value>
</context-param>

配置
瓦卢亚
配置
瓦卢布
但是我想存储一些复杂的对象,像这样

HashMap myConfig = new HashMap();

String[] cfgB={"b1", "b2"};

HashMap<String, String> cfgC=new HashMap<String, String>();
cfgC.put("C1", "1");
cfgC.put("C2", "2");

MyConfigD cfgD = new MyConfigD();

myConfig.put("configA", "A");
myConfig.put("configB",cfgB);
myConfig.put("configC",cfgC);
myConfig.put("configD",cfgD);
HashMap myConfig=newhashmap();
字符串[]cfgB={“b1”,“b2”};
HashMap cfgC=新的HashMap();
cfgC.put(“C1”、“1”);
cfgC.put(“C2”、“2”);
MyConfigD cfgD=新的MyConfigD();
myConfig.put(“配置A”、“A”);
myConfig.put(“configB”,cfgB);
myConfig.put(“配置”,cfgC);
myConfig.put(“配置”,cfgD);

context param不可能做到这一点,我还可以在Java或Spring中使用什么?

您可以在applicationContext.xml中使用
声明您的映射

作用域应为单例

类型/类可以是java.util.HashMap

然后可以在组件中@Autowired该bean

<util:map id="utilmap" map-class="java.util.HashMap">
    <entry key="key1" value="value1"/>
    <entry key="key2" value="value2"/>
</util:map>

如果您不受限制,并且可以灵活地决定如何设置属性,则有两种选择

首先是在@Configuration类中定义。对于大多数对象,可以使用@Autowired的bean。所有bean仅在运行时加载。 对于映射(和列表等),可以将它们定义为bean,然后使用@Resource注释访问它们。请注意,对于这些类型,您无法使用@Autowired访问地图

与对另一个答案的评论相反,我认为设置也可以在代码中定义,因为它是用XML编写的,所以它们被认为是等价的。通过用Java编写配置和设置,您可以获得OOP的强大功能,当您拥有复杂的配置时,OOP的强大功能将是无与伦比的

示例Bean声明:

@Bean
public MyConfig myConfig() {
    final MyConfig myConfig = new MyConfig();
    myConfig.put("configA", "A");
    ...
    return myConfig;
}

@Bean
public Map<String, String> myMap() {
    final Map<String, String> myMap = new HashMap<>();
    myMap.put("A", "a");
    return myMap;
}
编码

@Value("${myConfig.configA}")
private String configA;

您可以使用sameIs的监听器—有任何非xml解决方案吗?您可以在@Component注释类中硬编码它们。但是,你再也不能把它看成是设置了,那么它就是你的应用程序的一部分。这不能回答整个问题,甚至不能回答复杂对象的主要部分。设置可以是代码,它被认为是等效的,只是因为它是XML并没有让它变得特别/不同。即使在XML中,它也是“硬编码”的,那么它有什么不同呢?!他们引入OOP并成为大多数新应用程序中首选的配置样式的全部原因是,OOP对于大型复杂配置非常有用,这些配置在XML中可能会变得冗长和不可管理。您能展示bean声明和使用的完整示例吗?我不知道您在哪个文件中编写了这些示例,谢谢
myConfig.configA:A
myConfig.configB:B
myConfig.coll.cA:['a','b','c']
myConfig.coll.cB:{a:A,b:B,c:C}
...
@Value("${myConfig.configA}")
private String configA;