我们有一个非常复杂的JSF托管bean配置文件,如下所示。
有没有办法把它转换成某种CDI配置?
现在,当我们在AbcConfigFactory
上使用@Inject
时,它不会初始化配置文件中的值。我猜这是因为我们使用CDI而不是JSF来初始化它。或者类似的东西。:)
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<managed-bean>
<managed-bean-name>AbcConfig</managed-bean-name>
<managed-bean-class>com.a.b.c.AbcConfigFactory</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
<managed-property>
<property-name>abcSites</property-name>
<list-entries>
<value-class>com.a.b.c.SiteConfigBean</value-class>
<value>#{SiteConfig$A}</value>
<value>#{SiteConfig$B}</value>
</list-entries>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>SiteConfig$A</managed-bean-name>
<managed-bean-class>com.a.b.c.SiteConfigBean</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
<managed-property>
<property-name>siteName</property-name>
<value>A</value>
</managed-property>
<managed-property>
<property-name>starConfig</property-name>
<property-class>com.a.b.c.StarConfigBean</property-class>
<value>#{StarConfig$A}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>SiteConfig$B</managed-bean-name>
<managed-bean-class>com.a.b.c.SiteConfigBean</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
<managed-property>
<property-name>siteName</property-name>
<value>B</value>
</managed-property>
<managed-property>
<property-name>starConfig</property-name>
<property-class>com.a.b.c.StarConfigBean</property-class>
<value>#{StarConfig$A}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>StarConfig$A</managed-bean-name>
<managed-bean-class>com.a.b.c.StarConfigBean</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
<managed-property>
<property-name>siteName</property-name>
<value>A</value>
</managed-property>
</managed-bean>
</faces-config>
发布于 2012-05-10 21:26:44
最初版本的CDI规范中包含XML配置bean,但后来将其删除,只是为了在最近的规范未来版本(AFAIK)中重新包含它。
因此,简短的答案是:不,您不能使用XML来配置CDI (而且由于CDI和JSF是两个不同的东西,您显然不能在没有更改的情况下重用JSF配置文件)。
您的问题的解决方案附带了Seam Solder,它使用CDI的扩展机制来添加确切的功能(以及更多)。但是,为了适应CDI-beans,您仍然需要重新处理配置。
在对问题域一无所知的情况下:
如果XML配置是某种历史遗留物,不是由现实世界的需求强制的(比如为不同的部署场景提供不同的连接),我强烈建议丢弃XML并切换到CDI的基于注释的类型安全方法。有适用于所有主流用例的概念(比如用于测试的不同连接),您可以从使用XML进行“编码”的负担中解脱出来。
如果你真的需要(或仍然想要)基于XML的配置,Seam Solder是你的选择。
https://stackoverflow.com/questions/10534494
复制相似问题