CDI与桌面应用程序

时间:2015-06-02 07:55:47

标签: java cdi desktop-application

使用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”。有没有办法使用带有desctop应用程序的CDI?

2 个答案:

答案 0 :(得分:3)

如上所述@Boris Pavlović,您可以通过编程方式引导Weld并获取bean。但是,也可以使注射工作。您需要在桌面应用程序中定义启动方法,这将取代"替换"你的public static void main(String ... args)。考虑:

public class Main {

    @Inject
    private Bean bean;

    public void startup(@Observes ContainerInitialized event) {
        this.bean.sayHello();
    }
}

当引导焊接时,将调用此startup()方法。您可以通过执行org.jboss.weld.environment.se.StartMain作为主类来实现它。

答案 1 :(得分:1)

为项目添加焊接

<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();