例如,如何将以下内容转换为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();
}
答案 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();
}