Java 7 独立应用程序中的依赖注入

2024-02-26

我想在大型 Java 7 独立应用程序中使用依赖注入,但我不太确定从哪里开始。

我写了一个小测试应用程序:

public class Main {

    @Inject
    MyInterface myInterface;

    public static void main( String[] args ) {

        Main m = new Main();
        System.out.println(m.myInterface.getMessage());

    }

}

有一个接口:

public interface MyInterface {

    String getMessage();

}

和接口实现:

@Singleton
public class MyInterfaceImpl implements MyInterface {

    public String getMessage() {
        return "Hello World!";
    }

}

The pom.xml包含一个依赖项:

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

该应用程序可以编译,但是当然,它会崩溃并出现以下错误:NPE当尝试打印消息时。注射尚未发生。

所以,我的问题是:

  1. 可以在 Java 7 独立应用程序中实现依赖注入吗?
  2. 我还必须包含哪些其他依赖项才能使其正常工作?
  3. 有谁有一个简单的操作示例可以分享(我找不到)?

使用 Java 进行依赖注入的方法不只有一种。

(1) 例如,您可以使用标准 CDI,其中参考实现是Weld http://weld.cdi-spec.org/。有关于的文档在 Java SE 环境中使用 Weld http://docs.jboss.org/weld/reference/latest/en-US/html/environments.html#d0e5586,你的意思可能是什么独立应用程序.

您也可以使用Spring框架 http://projects.spring.io/spring-framework/,它还支持常见的 CDI 注释(例如@Inject)。在这种情况下,您通常会创建一个ClasspathXmlApplicationContext http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#resources-app-ctx-classpathxml在程序启动时让 Spring 管理(创建/销毁)您需要的所有 bean。

(2) 您当前的依赖项仅导入Java EE的API。因此,如果你得到一个,我并不感到惊讶NullPointerException在执行时。您需要添加一个实现(如 Weld)或使用 Spring。

(3) 请参阅上面的链接。

还看一下Java EE 6 CDI 实现之间的差异 https://stackoverflow.com/questions/2270379/differences-between-java-ee-6-cdi-implementations获取有关其他 Java CDI 可用实现的参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 7 独立应用程序中的依赖注入 的相关文章

随机推荐

  • 防止画布对象发生碰撞或交叉

    我正在画布上绘制 n 个矩形 矩形是可拖动和可缩放的 我想防止它们重叠或相交 最好的情况是 如果它们只是相互咬合 我想办法检查一下十字路口 在我的示例中 我将触摸对象的不透明度设置为 0 1 巧合的是 在我尝试解决这个问题时 我的对象在接触
  • 为什么在 cmd 中安装任何 python 模块时会收到这些错误“警告:忽略无效的分发 -yproj ”

    警告 忽略无效的分发 yproj c users space junk appdata local programs python python310 lib site packages 警告 忽略无效的分发 yproj c users s
  • 无法在 chrome google.maps api 中加载资源

    我在 chrome 控制台中出现此错误 Failed to load resource net ERR BLOCKED BY CLIENT https maps google com maps api v3 api js 22 2 intl
  • 修复 Flash 的激进缓存

    我有一个闪存应用程序 可以加载大量变化的数据偶尔 所以我设置了我的服务器来发送Last Modified标头并回复304 Not Modified当客户端的版本没有过时时 它在每个浏览器中都能正常工作 但 Flash 完全忽略这一点并积极缓
  • 在矩形的联合中找到孔?

    我在单位正方形 红色 内和周围有许多随机矩形 黑色 需要提取单位正方形内未被任何矩形覆盖的所有多边形区域 看起来这可以用 Shapely 来完成 当我得到矩形 绿色 的并集时 我已经达到了这一点 但我不知道如何从单位正方形中减去它并检索多边
  • Symfony2 路由不支持的键

    我正在学习 Symfony 2 但遇到一些问题 使用教程 我在routing yml内捆绑 acme demo homepage path hello name defaults controller AcmeDemoBundle Defa
  • 处理 Powershell 函数中的管道和参数输入

    我对 在一个月的午餐中学习 PowerShell 一书中看到的内容感到困惑 在第 21 章中 当作者讨论通过参数绑定或管道接受输入的函数时 他给出了两种模式 第一个如下 function someworkerfunction do some
  • PHP 5.4:获取实例变量的完全限定类名

    我知道有静电classPHP 5 5 上的字段 但我必须坚持使用 PHP 5 4 是否可以从变量中获取完全限定的类名 Example namespace My Awesome Namespace class Foo 以及代码中的其他地方 p
  • 尽管我已在 Xcode 5 中添加,但应用程序图标未显示

    我已经添加了如下图所示的图标 但我仍然没有在我的设备或模拟器中看到该图标 这可能是 XCode 5 的错误 即添加的图标实际上并未包含在应用程序包中 但您可以通过转到 构建阶段 展开 复制包资源 然后按底部的 号手动添加来解决此问题图标文件
  • 嵌套哈希已定义?() [重复]

    这个问题在这里已经有答案了 确定是否最简洁的方法是什么 hash key1 key2 已定义 如果 hash or hash key1 为零 defined hash key1 key2 返回 True 如果 hash key1 存在 不判
  • eclipse中从方法定义跳转到方法调用【Java视角】

    日食中 我们有一个快捷键可以从调用方法的任何地方跳转到方法定义 即使用 F3 但是 如果我当前位于方法定义上并且我想要转到调用或使用该方法的位置 该怎么办 这有什么捷径吗 你可以试试Ctrl Shift G这相当于查找参考文献 or Ctr
  • 汇编代码不识别?和@数据

    这是我的第一个汇编程序 任何人都可以帮助使其成功运行 我看到下面的编译错误 为什么它不识别 and data 我正在尝试交换汇编中的两个变量 我正在执行以下命令 nasm f elf swap asm 但我收到这个错误 swap asm 6
  • WebLogic 10gR3 - 解析多部分/表单数据的 Content-Type 标头时出现 UnsupportedEncodingException

    我的应用程序在 WebLogic 10gR3 上通过 HTTP POST 接收多部分内容 每当客户指定charset属性beforeContent Type 标头上的其他属性 例如Content Type multipart form da
  • 乘以 keyup 上的输入值

    如何将一个输入的值乘以 2 并将其保存到另一个输入 那么当我输入 10 例如 时 第二个输入的值将是 20 Thanks 两个输入字段
  • 强制溢出到顶部而不是底部

    我希望我的内容溢出到 div 的顶部和左侧而不是右下角 目的是当展开 div 时 内容看起来像是从顶部而不是从底部进入 CSS 有什么办法可以做到这一点吗 很像你设置的方式vertical align对于文本 我想让 div 溢出到顶部而不
  • 将父容器的平移手势交给嵌套的 UICollectionView

    我正在尝试构建一个复杂的分割视图容器控制器 该控制器有利于两个可变高度容器 每个容器都有自己的嵌套视图控制器 父控制器上有一个全局平移手势 允许用户拖动视图容器中的任意位置 并在视图之间上下滑动 分隔线 它还具有一些智能位置阈值检测逻辑 可
  • 如何为 Cosmos 数据库中的每个文档设置字段?

    将每条记录的 PumperID 字段设置为默认值的 Cosmos 存储过程会是什么样子 我们需要这样做来修复一些数据 因此该过程将访问具有 PumperID 字段的每条记录 并非所有文档都有此字段 并将其设置为默认值 假设执行一次性数据维护
  • Biztalk Log4Net [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人在 Biztalk 中使用过 log4net 吗 我们目前正在考虑使用它 并试图了解它的优点 缺点 以及它是否能满足我们的需求 我已经将 L
  • Tomcat:限制 /just one/ webapp 对 localhost 的访问

    我正在运行 Tomcat 6 来为多个 Web 应用程序提供服务 其中大多数是面向公众的 但我想限制访问just onewebapp 仅允许来自本地主机的连接 我可以限制访问allwebapps 在 context xml 中使用 Valv
  • Java 7 独立应用程序中的依赖注入

    我想在大型 Java 7 独立应用程序中使用依赖注入 但我不太确定从哪里开始 我写了一个小测试应用程序 public class Main Inject MyInterface myInterface public static void