我正在编写一个客户端/服务器应用程序并使用Spring进行配置。
我的客户端界面处理编组到服务器的请求并处理响应。
目前,我的工厂看起来像是:
public class ClientFactory {
private ApplicationContext ctx;
public ClientFactory(){
ctx = new AnnotationConfigApplicationContext(MyConfig.class);
}
public MyClient(String host, int port){
MyClient client = ...
// create a connection to the server
return client;
}
}
现在,MyClient有一堆我想要注入的依赖项,所以我想使用Spring创建MyClient实例并使用@Inject注释来注入依赖项。
如何将主机/端口作为配置元数据传递到Spring配置中?如果我不能建议的替代方案。我自己可以做所有的布线,但那就是Spring的用途。
杰夫
答案 0 :(得分:0)
您应该检查弹簧参考的配置部分。例如,您可以使用spring 3.x创建这样的bean。
@Configuration
// spring config that loads the properties file
@ImportResource("classpath:/properties-config.xml")
public class AppConfig {
/**
* Using property 'EL' syntax to load values from the
* jetProperties value
*/
private @Value("#{jetProperties['jetBean.name']}") String name;
private @Value("#{jetProperties['jetBean.price']}") Long price;
private @Value("#{jetProperties['jetBean.url']}") URL url;
/**
* Create a jetBean within the Spring Application Context
* @return a bean
*/
public @Bean(name = "jetBean")
JetBean jetBean() {
JetBean bean = new JetBeanImpl();
bean.setName(name);
bean.setPrice(price);
bean.setUrl(url);
return bean;
}
}
答案 1 :(得分:0)
我使用静态配置类解决了这个问题。
public class ClientFactory {
private ApplicationContext ctx;
public ClientFactory(){
ctx = new AnnotationConfigApplicationContext(MyConfig.class,ServerConfig.class);
}
public MyClient(String host, int port){
MyClient client = ...
// create a connection to the server
return client;
}
@Data
@AllArgsConstructor
public static class ServerDetails{
private int port;
private String host;
}
@Configuration
public static class ServerConfig{
static String host;
static int port;
@Bean
public void serverDetails(){
return new ServerDetails(host, port);
}
}
}
但感觉非常笨重。还有更好的方法吗?