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 创建的。