java - 使用 spring,我可以提取静态方法的某些部分来用于设置 bean 的属性吗?

标签 java spring

我有一个无法控制的静态方法:MyUtils.getServiceURL(),它返回一个 URL。我需要从此 URL 中提取端口来设置 bean 的属性:

<bean id="myBean>
   <property name="defaultPort" value="?????"/>
</bean>

我可以将 URL 的字符串值作为 bean 获取,如下所示:

<bean id="serviceURL" class="MyUtils" factory-method="getServiceURL" />

我可能只是要编写一个方法来解析 myBean 中的 URL 并提取端口。我想知道是否有一种方法可以避免这样做,并直接在 spring 上下文中配置它?

最佳答案

不需要自定义类或解析器。请记住,bean 只是一个具有 get/is/set 方法的类。一个java.net.URL类符合这样的资格。

解决方案:使用 java.net.URL作为 Spring 可配置 bean 并将其称为 getPort方法。

请记住,在 Spring 中,您可以非常轻松地将任何内容连接为 bean,只要它使用 get/is/set Bean 约定来实现方法即可。 java.net.URL 类做了这样的事情。

**警告**我只是从我的a$$中输入这个,你必须检查我可能在这个Spring配置伪代码中引入的任何语法恶作剧。可以肯定的一件事是,该概念将适用于 Spring 2.5,并且它依赖于 util架构。

如果您使用的是旧版本的 Spring,则必须使用 PropertyPathFactoryBean 。如果您使用 Spring 3.0,您会想要使用 Spring 表达式语言(EL),但我无法评论后者,因为我对 Spring 3.0 不熟悉。

在java中:

int port = (new URL(MyUtils.getServiceURL()).getPort()

Spring :

<bean id="serviceURL" class="MyUtils" factory-method="getServiceURL" />

<bean id="myURL" class="java.net.URL">
  <constructor-arg>
    <ref-bean="serviceURL"/>
  </constructor-arg>
</bean>

<util:property-path id="defaultPort" path="myURL.port"/>

<bean id="myBean>
    <property name="defaultPort" ref="defaultPort"/>
</bean>

可能有一种方法可以将所有这四个表达式合并为三个或更少,但不知道这是否会提高可读性。不过,这个概念仍然是一样的。对待java.net.URL实例作为 bean,通过其构造函数设置其 URL,并获取(通过 Spring)其 getPort() 的保留。方法。


** 编辑 **: 如果您使用 Spring 2.5,您可以创建一个内联 groovy bean 来为您完成所有这些工作。我见过人们这样做作为集成粘合剂来摆脱大量临时 Spring bean 占位符。在我看来,当您需要定义一个类(当它比仅使用 Spring 标签更简单)并且您知道这样的类不会在 Spring 连接之外使用时,这是最好的选择。

关于java - 使用 spring,我可以提取静态方法的某些部分来用于设置 bean 的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4998894/

相关文章:

java - 释放()异常后调用的方法无法使用android相机恢复

java - Spring 数据JPA : Query Optimization

java - 仍然无法访问本地主机 :5762 after starting RabbitMQ server

java - 如何从 MongoRepository/QueryDSL 获取不同的字段?

java - 数组和对象的 Jackson 反序列化问题

java - 如何处理JPA存储库查询方法中的多个字段?

java - Android 写入 SDCARD 问题?

java - Log4j2 - 不支持的参数

java - 碧 Jade 报告 : How to break lines base on a character count

java - 如何在 java 中读取不以换行符或回车符结尾的行?