如何在普通的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/

10-13 08:49