如何从Spring bean创建java.util.Optional <t>对象?

时间:2015-12-03 23:14:36

标签: java spring generics

Java

public class MyObject{}
public class MyFactory{
     private Optional<MyObject> myproperty;
     public Optional<MyObject> getMyproperty{...}
     public void setMyproperty{...}
}

Spring config xml(没有工作)

<bean id="myproperty" class="java.util.Optional">
    <constructor-arg>
        <value>com.MyObject</value>
    </constructor-arg>
</bean>
<bean id="myfactory" class="com.Myfactory">
    <property name="myproperty" ref="myproperty" />
</bean>

spring支持泛型bean吗?

使用Optional的原因是它提供了一些有用的功能,例如检查值是否为null。您可以在一行代码中完成检查和进一步操作。

getMyproperty().ifPresent(id -> call.setId(id));

2 个答案:

答案 0 :(得分:2)

似乎问题与泛型无关。

您只需要正确告诉Spring使用工厂方法创建bean,因为Optional只能通过工厂方法创建。类似的东西:

<bean id="myproperty" class="java.util.Optional" factory-method="of">
    <constructor-arg type="java.lang.Object" value="com.MyObject" />
</bean>

它应该意味着myproperty创建Optional.of(com.MyObject.class) bean(如果那是您要使用的那个,请将factory-method更改为ofNullable

答案 1 :(得分:0)

另一个选择是使用SpEL( S pring E xpression L anguage):

<bean id="mybean" ...>
    <property name="optProp" value="#{ T(java.util.Optional).of( @wrapme) }"/>
</bean>

其中“wrapme”是您要在java.util.Optional中包装的其他地方定义的bean的名称。