如何在普通的Java SE环境中使用使用Weld的CDI启动应用程序,该应用程序仅从命令行启动并且在后台没有Glassfish或Tomcat?使用Weld 1.x,您可以执行类似的操作
public static void main(String[] args) {
final WeldContainer weld = new Weld().initialize();
service = weld.instance().select(MyService.class).get();
}
但是在Weld 2.x中,缺少initialize()。
我可以做这样的事情:
@ApplicationScoped
public class Main {
@Inject
Foo foo;
public void main(@Observes ContainerInitialized event) {
System.out.println("Starting application");
}
}
这将注入Foo,但是我想将我的整个应用程序打包到一个jar中,以供其他应用程序使用,而无需等待Weld真正开始运行。所以我基本上想要一种正确初始化Weld的方法。
最佳答案
自举焊接Weld SE在Weld 1.x和2.x之间未更改,请参见reference manual。
只要确保导入org.jboss.weld.environment.se.Weld
,而不是新的类org.jboss.weld.Weld
。
关于java - Bootstrap Weld 2.1.0来自无效主体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20707346/