XML p-namespace属性的等效Java配置是什么?

时间:2015-10-27 17:52:44

标签: java spring spring-java-config

例如,如何将以下内容转换为JavaConfig @Bean

<bean id="ldapDao" class="org.mycompany.LdapDAOImpl" p:ldapUrl-ref="ldapHost"/>

这是我使用等效的JavaConfig Bean

的地方
@Bean(name="ldapDao")
public LdapDAOImpl getLdapDAOImpl(){
    LdapDAOImpl ldapDAOImpl = new LdapDAOImpl();
    //How can I set the reference here to ldapHost?
    return new LdapDAOImpl();
}          

2 个答案:

答案 0 :(得分:3)

首先,p-namespace定义为

  

p-namespace使您可以使用bean元素的属性,   而不是嵌套的<property/>元素来描述您的属性   价值观和/或合作豆。

换句话说,它只是定义bean属性的替代方法。

例如,

<bean id="ldapDao" class="org.mycompany.LdapDAOImpl" p:ldapUrl-ref="ldapHost"/>

相当于

<bean id="ldapDao" class="org.mycompany.LdapDAOImpl">
    <property name="ldapUrl" ref="ldapHost" />
</bean>

使用文档中的示例解释-ref属性中的p:后缀

  

如您所见,此示例不仅包含使用的属性值   p命名空间,但也使用特殊格式来声明属性   引用。而第一个bean定义使用<property name="spouse" ref="jane"/>来创建从bean john到的引用   bean jane,第二个bean定义使用p:spouse-ref="jane"作为   属性做完全相同的事情。在这种情况下,配偶是   属性名称,而-ref部分表示这不是a   直接值,而是对另一个bean的引用。

property定义中出现的每个<bean>元素都需要bean类中相应的setter。

鉴于上述所有内容,相应的@Bean定义将初始化类型为org.mycompany.LdapDAOImpl的对象,并使用与名为{{1的bean对应的对象调用其setLdapUrl setter的定义作为一个参数。

例如,假设你有这样一个bean

ldapHost

然后,您可以使用它来初始化@Bean public LdapHost ldapHost() { return new LdapHost(); }

ldapDao

或者,你可以让Spring为你注入它。

@Bean
public LdapDaoImpl ldapDao() {
    LdapDaoImpl ldapDao = new LdapDaoImpl();
    ldapDao.setLdapUrl(ldapHost());
    return ldapDao;
}

答案 1 :(得分:1)

看起来像p:ldapUrl-ref只是在我的LdapDAOImpl类中设置ldapUrl的值。这么简单的setter工作正常。

@Bean(name="ldapDao")
    public LdapDAOImpl getLdapDAOImpl(){
        LdapDAOImpl ldapDAOImpl = new LdapDAOImpl();
        ldapDAOImpl.setLdapUrl(url);
        return new LdapDAOImpl();
    }