【问题标题】:Issue in calling DAO method from Service从 Service 调用 DAO 方法的问题
【发布时间】:2013-04-09 07:04:43
【问题描述】:

我有一个 DAO,它有这样的方法:

class AbcService 
{
  private AbcDAO isntance;
  public void getStuff()
  {
    instance.getQueryResult();
  }
}

现在,如果从任何地方调用此方法,它将在实例调用查询方法的地方给出 NullPointerException。 这段代码仍然在项目中使用了很长时间,在称它不正确之前我会三思而后行。是否有某种方式可以访问此代码。这是标准做法吗?

【问题讨论】:

    标签: java jakarta-ee model-view-controller dao


    【解决方案1】:

    如果你有isntance 的setter,你只需要在调用getStuff 之前调用它。这是标准的(尽管有些人会说所有需要的字段都应该在构造函数中设置。

    【讨论】:

    • 为此我有一个方法: public void setAbcDAO(final AbcDAO istance) { this.isntance = instance;但我不知道这是在哪里以及如何调用...
    • 所以它是标准的。你只需要在调用getStuff之前调用setter
    • 只有一个问题......实例被声明为私有......我如何从任何其他类调用它
    【解决方案2】:

    这个答案只适用于你使用 springbean 并且它比你的问题更广泛.. 但我想这对你有用

    是的,当您将其用作 spring bean 时,这通常是使用的做法。所以,在调用这个方法之前,需要确定这个springbean已经实例化了。基本上,这是通过从 ApplicationContext 获取 spring bean 或调用者类本身从其父 bean 接收此 bean 的实例来完成的......

    一般的做法是通过在 web.xml 中定义 contextloaderlistener 来加载应用上下文。有关如何操作的更多信息,请参阅http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/context/ContextLoaderListener.html

    【讨论】:

      【解决方案3】:

      我认为对象instance 是通过Spring Dependency Injection注入AbcService。请在您的项目中搜索任何“.xml”文件,该文件的 bean 定义中提到了 AbcService 的完全限定类名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 2014-09-19
        • 1970-01-01
        相关资源
        最近更新 更多