有一些使用 CDI 的业务逻辑(@javax.inject.Inject 和@javax.persistence.PersistenceUnit)。想要在 desctop 应用程序中重用它。
将 beans.xml 添加到 META-INF 文件夹中。将 Java 7 设置为默认值。编写了简单的类:
public class Main {
@Inject
private static AggregatedUserQueries aggregatedUserQueries;
public static void main(String[] args) {
System.out.println(aggregatedUserQueries);
}
}
当然它会向控制台打印“null”。有什么方法可以将 CDI 与 desctop 应用程序一起使用吗?
最佳答案
如 @Boris Pavlović
所述,您可以引导 Weld 并以编程方式获取 bean。但是,也可以使注入(inject)工作。您需要在桌面应用程序中定义启动方法,这将“替换”您的 public static void main(String ... args)
。考虑:
public class Main {
@Inject
private Bean bean;
public void startup(@Observes ContainerInitialized event) {
this.bean.sayHello();
}
}
这个 startup()
方法将在 Weld 启动时被调用。您可以通过将 org.jboss.weld.environment.se.StartMain
作为主类执行来实现它。
关于java - 带有桌面应用程序的 CDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30590442/