gpt4 book ai didi

java - 将属性传递给 Spring 上下文

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:34:10 26 4
gpt4 key购买 nike

我正在使用 Spring 来处理对某个远程服务器的 RMI 调用。构建应用程序上下文并从客户端获取用于远程调用的 bean 非常简单:

ApplicationContext context = new ApplicationContext("classpath:context.xml");

MyService myService = (MyService ) context.getBean( "myService " );

但是我没有看到将属性传递到配置中的简单方法。例如,如果我想在客户端运行时确定远程服务器的主机名。

理想情况下,我会像这样在 Spring 上下文中有一个条目:

<bean id="myService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://${webServer.host}:80/MyService"/>
<property name="serviceInterface" value="com.foo.MyService"/>
</bean>

并将属性作为参数从客户端传递到上下文。

我可以在上下文中使用 PropertyPlaceholderConfigurer 来替代这些属性,但据我所知,这仅适用于从文件中读取的属性。

我有一个解决这个问题的实现(作为答案添加),但我正在寻找一个标准的 Spring 实现来避免自己动手。是否有另一个 Spring 配置器(或其他任何东西)来帮助初始化配置,还是我最好查看 java 配置来实现这个?

最佳答案

参见 http://forum.springsource.org/showthread.php?t=71815

TestClass.java

package com.spring.ioc;

public class TestClass {

private String first;
private String second;

public String getFirst() {
return first;
}

public void setFirst(String first) {
this.first = first;
}

public String getSecond() {
return second;
}

public void setSecond(String second) {
this.second = second;
}
}

SpringStart.java

package com.spring;

import java.util.Properties;

import com.spring.ioc.TestClass;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

public class SpringStart {
public static void main(String[] args) throws Exception {
PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
Properties properties = new Properties();
properties.setProperty("first.prop", "first value");
properties.setProperty("second.prop", "second value");
configurer.setProperties(properties);

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
context.addBeanFactoryPostProcessor(configurer);

context.setConfigLocation("spring-config.xml");
context.refresh();

TestClass testClass = (TestClass)context.getBean("testBean");
System.out.println(testClass.getFirst());
System.out.println(testClass.getSecond());
}
}

spring-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="testBean" class="com.spring.ioc.TestClass">
<property name="first" value="${first.prop}"/>
<property name="second" value="${second.prop}"/>
</bean>

</beans>

Output:

first value
second value

关于java - 将属性传递给 Spring 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1086235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com