正如承诺的那样,我们很高兴宣布Seam 3模块的另一个早期版本,Seam XML 3.0.0 Alpha 1。由 Seam XML模块,由 Stuart Douglas 贡献并领导,是一个CDI可移植扩展,允许您使用XML作为注释的替代方式来添加、修改和扩展CDI发现的bean。
但这不是任何XML。这是一个基于JSR-299(当时称为Web Beans)规范的早期修订版本的类型安全的XML格式。
尝试一下
假设您已经定义了以下内容ProducerBean类
package org.jboss.seam.xml.test.injection;
public class ProducerBean {
private String message = "Hello, annotation fans!";
}
和以下 限定符 注解
package org.jboss.seam.xml.test.injection;
@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface ProducerQualifer {}
您想通过CDI生产者公开message字段ProducerBean。您可以使用注解方法
package org.jboss.seam.xml.test.injection;
public class ProducerBean {
@Produces
@ProducerQualifier
private String message = "Hello, annotation fans!";
}
但是,如果这个类不在您的控制之下,或者您更喜欢XML标签汤?您可以使用XML应用相同的bean元数据
<test:ProducerBean>
<test:message>
<s:Produces/>
<test:ProducerQualifier/>
<s:value>Hello, XML fans!</s:value>
</test:message>
</test:ProducerBean>
这个片段可能需要一段时间才能让您的思维解析,但仔细观察XML标签是如何映射到ProducerBean类的注解版本。注意,我们还在XML中覆盖了message字段的值,将其设置为“你好,XML爱好者!”,而不是“
你好,注解爱好者!”
。在XML中分配字段值是一个非常有用的功能,它不能(容易地)仅用注解解决。
所有这些命名空间前缀是什么意思?命名空间前缀s是用于Seam XML架构的,test代表配置的bean类的Java包。以下是包括XML根和命名空间声明的完整配置文件。注意,还配置了另一个bean,ReceiverBean,这个通过元数据扩展来实现。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:s="urn:java:seam:core"
xmlns:test="urn:java:org.jboss.seam.xml.test.injection">
<test:ProducerBean>
<s:override/>
<test:message>
<s:Produces/>
<test:ProducerQualifier/>
<s:value>Hello, XML fans!</s:value>
</test:message>
</test:ProducerBean>
<test:RecieverBean>
<s:extends/>
<test:anotherField>
<test:ProducerQualifier/>
<s:Inject/>
</test:anotherField>
</test:RecieverBean>
</beans>
为了给您呈现一个完整的画面,这个例子连接了两个对象,一个具有生产者字段的bean,它会生产"大家好,XML爱好者!
",另一个bean会注入产生的值。在ProducerBean覆盖现有bean的同时,RecieverBean扩展了现有bean,因此类上实际存在的注解将与XML文件中定义的注解合并。更多信息请参考附带在发行版中的文档和示例。
启动您的XML编辑器!
既然您已经看到了这个模块能提供的一些功能,现在是时候去获取它了。以下是您开始所需的链接。
与所有Seam 3模块的发布一样,Seam XML模块已发布到Maven 2中央仓库。以下是您需要在POM文件中添加的依赖声明,以便将此模块包含到您的项目中(注意版本号中的连字符)
<dependency>
<groupId>org.jboss.seam.xml</groupId>
<artifactId>seam-xml-core</artifactId>
<version>3.0.0-Alpha1</version>
</dependency>
由于这是早期版本,无法保证语法已经确定。一切取决于您的反馈,我们非常希望收到您的反馈!
请加入我们!
我们希望所有JSR-299实现都能加入我们的努力,将XML配置纳入下一个版本的规范。您可以通过采用此XML模式,并帮助我们定义、完善和改进它来提供帮助。
感谢Stuart Douglas为这个模块的整合。XML配置为整个Seam 3项目奠定了关键基础!还要感谢Shane Bryzak为这次发布所做的准备工作。
敬请期待不久将来的其他Seam模块的alpha版本,例如Seam International(i18n),它将为Java EE 6应用程序提供增强的语言支持,以及Seam Faces,这是JSF 2的扩展和增强的精选集合。请记住,目前所有内容都在草稿阶段。加入我们!