Java SE 中的 Weld

作者:    |       CDI Weld

Weld 的一个真正出色的特性是它在 Java SE 中的良好工作表现。当然,如果你单独运行 Weld,你不会得到像 EJB 这样的良好功能(你需要一个可嵌入的 EJB 容器来做到这一点),但你确实可以得到一大堆很棒的东西,包括

  • 具有@PostConstruct@PreDestroy生命周期回调
  • 带有限定符和替代品的依赖注入
  • @ApplicationScoped, @Dependent@Singleton作用域
  • 拦截器和装饰器
  • stereotypes
  • 事件
  • 可移植扩展支持

Weld 发行版附带一个示例控制台应用程序和一个示例 Swing 应用程序。

这是一个非常简单的控制台应用程序

@Singleton
public class HelloWorld {

    @PostConstruct
    void init() {
        System.out.println("Initializing Hello World application");
    }

    void printHello(@Observes ContainerInitialized event, 
                    @Parameters List<String> parameters) {
        System.out.println("Hello " + parameters.get(0));
    }

}

TheprintHello()方法是一个 CDI 观察者方法,用于ContainerInitialized事件。当控制台应用程序启动时,由 Weld Java SE 扩展触发此事件。可以使用@Parameters List<String>.

注入命令行参数如往常一样,我们需要一个名为META-INF/beans.xml的文件,该文件包含我们的HelloWorld

类。

java org.jboss.weld.environments.se.StartMain Gavin

我们使用

@Singleton
public class HelloWorld {

    void printHello(@Observes ContainerInitialized event, 
                    @Parameters List<String> parameters, 
                    Hello hello) {
        hello.say(parameters.get(0));
    }

}

当然,如果你使用 CDI,你可能想更多地利用依赖注入,例如Hello是一个 bean

public class Hello {
    public void say(String name) {
        System.out.println("Hello " + name);
    }
}

The Weld SE 扩展是由贡献者 Peter Royle 创建的。


返回顶部