无需自定义类,或解析器。请记住,一个bean只是一个具有get/is/set方法的类。 A java.net.URL
类符合此类要求。
解决方案:使用java.net.URL
作为Spring配置bean,并将其称为getPort
方法。
记住,在春天,你可以很容易的,只要是体育用GET /是/套 Bean的常规方法的任何连线作为豆。 java.net.URL类做了这样的事情。
**警告**我只是在我的$ $$中输入了这个内容,您必须检查我可能在这个Spring-config伪代码中引入的任何语法错误。有一点可以肯定的是,这个概念将在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,并通过其getPort()
方法获得一个暂挂(通过Spring)。
** **编辑: 如果您在使用Spring 2.5,您可以创建一个内嵌的Groovy豆,做一切你。我见过人们这样做一体化胶水摆脱众多临时春豆的地方持有人。当你需要定义一个类(当它比使用Spring标记更简单时)以及当你知道这样的类不会在Spring的布线之外使用时,这是IMO的最佳选择。
将java.net.URL视为一个bean(请参阅下面的答案)。 – 2011-02-16 01:44:55