带有桌面应用程序的 CDI
CDI with desktop application
有一些使用 CDI 的业务逻辑(@javax.inject.Inject 和@javax.persistence.PersistenceUnit)。想在 desctop 应用程序中重用它。
已将 beans.xml 添加到 META-INF 文件夹中。将 Java 7 设置为默认值。写得简单 class:
public class Main {
@Inject
private static AggregatedUserQueries aggregatedUserQueries;
public static void main(String[] args) {
System.out.println(aggregatedUserQueries);
}
}
当然它会打印 "null" 到控制台。有什么方法可以将 CDI 与 desctop 应用程序一起使用吗?
将焊接添加到您的项目
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
<version>2.2.12.Final</version>
</dependency>
然后在您的应用程序中的某处对其进行初始化:
WeldContainer weld = new Weld().initialize();
并查找一个 bean:
AggregatedUserQueries queries =
weld.instance().select(AggregatedUserQueries.class).get();
如前所述 @Boris Pavlović
,您可以 bootstrap 以编程方式焊接和获取 bean。但是,也可以使注入工作。您需要在桌面应用程序中定义启动方法,它将 "replace" 您的 public static void main(String ... args)
。考虑:
public class Main {
@Inject
private Bean bean;
public void startup(@Observes ContainerInitialized event) {
this.bean.sayHello();
}
}
此 startup()
方法将在 bootstraped Weld 时调用。您可以通过执行 org.jboss.weld.environment.se.StartMain
作为主 class.
来实现它
有一些使用 CDI 的业务逻辑(@javax.inject.Inject 和@javax.persistence.PersistenceUnit)。想在 desctop 应用程序中重用它。
已将 beans.xml 添加到 META-INF 文件夹中。将 Java 7 设置为默认值。写得简单 class:
public class Main {
@Inject
private static AggregatedUserQueries aggregatedUserQueries;
public static void main(String[] args) {
System.out.println(aggregatedUserQueries);
}
}
当然它会打印 "null" 到控制台。有什么方法可以将 CDI 与 desctop 应用程序一起使用吗?
将焊接添加到您的项目
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
<version>2.2.12.Final</version>
</dependency>
然后在您的应用程序中的某处对其进行初始化:
WeldContainer weld = new Weld().initialize();
并查找一个 bean:
AggregatedUserQueries queries =
weld.instance().select(AggregatedUserQueries.class).get();
如前所述 @Boris Pavlović
,您可以 bootstrap 以编程方式焊接和获取 bean。但是,也可以使注入工作。您需要在桌面应用程序中定义启动方法,它将 "replace" 您的 public static void main(String ... args)
。考虑:
public class Main {
@Inject
private Bean bean;
public void startup(@Observes ContainerInitialized event) {
this.bean.sayHello();
}
}
此 startup()
方法将在 bootstraped Weld 时调用。您可以通过执行 org.jboss.weld.environment.se.StartMain
作为主 class.