【问题标题】:CDI with desktop application带有桌面应用程序的 CDI
【发布时间】:2015-06-02 07:55:47
【问题描述】:

有一些使用 CDI 的业务逻辑(@javax.inject.Inject 和 @javax.persistence.PersistenceUnit)。想在桌面应用程序中重用它。

将 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?

【问题讨论】:

    标签: java cdi desktop-application


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      将焊缝添加到您的项目中

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 2013-08-31
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多