有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用applicationContext中的嵌套属性构造bean。xml?

我有这样的Java类:

public class Config {
    public Config1 getConfigOpt1();
    public Config2 getConfigOpt2();
}

public class SomeBean {
    public Config getEntireConfig();
}

public class BeanToConstruct {

    public static BeanToConstruct createAndStart( Config1 config1, Config2 config2 )
}

给定SomeBean,我会这样构造BeanToConstruction:

SomeBean someBean = ....
BeanToConstruct bean = BeanToConstruct.createAndStart( 
    someBean.getEntireConfig().getConfigOpt1(),
    someBean.getEntireConfig().getConfigOpt2() )

如何在applicationContext中实现这一点。xml?这基本上就是我想做的,但显然行不通。我可以把整个配置对象拉到它自己的bean中,但我不想有这个额外的bean,它只需要让构建BeanToConstruct成为可能

<bean class="com.example.SomeBean" id="someBean"/>
<bean class="com.example.BeanToConstruct" factory-method="createAndStart" id="myBean">
    <constructor-arg>
        <bean factory-bean="someBean" factory-method="getEntireConfig().getConfigOpt1()"/>
    </constructor-arg>
    <constructor-arg>
        <bean factory-bean="someBean" factory-method="getEntireConfig().getConfigOpt2()"/>
    </constructor-arg>
</bean> 

共 (2) 个答案

  1. # 1 楼答案

    春天3号。你可以使用expression language

    <bean class="com.example.BeanToConstruct" factory-method="createAndStart" id="myBean"> 
        <constructor-arg value = "#{someBean.entireConfig.configOpt1}" /> 
        <constructor-arg value = "#{someBean.entireConfig.configOpt2}" /> 
    </bean> 
    
  2. # 2 楼答案

    我认为您可以使用util:property path来实现:

    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
    
    ...
    
    <bean class="com.example.SomeBean" id="someBean"/>
    <bean class="com.example.BeanToConstruct" factory-method="createAndStart" id="myBean">
        <constructor-arg>
            <util:property-path path="someBean.entireConfig.configOpt1"/>
        </constructor-arg>
        <constructor-arg>
            <util:property-path path="someBean.entireConfig.configOpt2"/>
        </constructor-arg>
    </bean>
    
    ....
    </beans>