Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在J2EEWeb应用程序中从服务层调用DAO方法_Java_Design Patterns_Concurrency_Object Lifetime - Fatal编程技术网

Java 如何在J2EEWeb应用程序中从服务层调用DAO方法

Java 如何在J2EEWeb应用程序中从服务层调用DAO方法,java,design-patterns,concurrency,object-lifetime,Java,Design Patterns,Concurrency,Object Lifetime,通常,现在很多应用程序都使用Spring,它负责应用程序中pojo类的生命周期。但是,如果我的应用程序由于其他一些问题而无法使用Spring呢。如何从应用程序的服务层转到DAO层 目前这就是我正在做的 public class MyServiceImpl{ private static MyDAO daoInstance=new MyDAO(); public void someMethod(){ daoInstance.methodToCall();

通常,现在很多应用程序都使用Spring,它负责应用程序中pojo类的生命周期。但是,如果我的应用程序由于其他一些问题而无法使用Spring呢。如何从应用程序的服务层转到DAO层

目前这就是我正在做的

public class MyServiceImpl{

    private static MyDAO daoInstance=new MyDAO();

    public void someMethod(){
        daoInstance.methodToCall();
    }

}

public class MyDAO{

   public void methodToCall(){


   }

}
将MyServiceImpl中的DAO实例保持为静态可以确保所有ServiceImpl对象中只有一个实例。但是,如果许多用户同时访问同一段代码,这不会产生并发问题吗

但是,如果我不保持静态,那么每个MyServiceImpl对象都会有一个DAO实例。这不会在堆中留下这么多对象。如何管理这些对象的生命周期

我想了解从应用程序的一个层导航到另一个层的正确方法是什么,同时考虑并发性、性能和其他类似因素


谢谢您的帮助。

这取决于您的要求和设计

你想控制资源吗?然后确保每个人都从一个位置(即singleton)获得它们

你担心表现吗?然后确保考虑所有因素,包括线程数(并发访问)、I/O、内存使用与对象等。

很难平衡所有非功能性需求,但理想情况下,在设计应用程序时,您必须根据需求和业务目标进行权衡


有关更多信息,请参阅。

使DAO实例为静态与多线程无关。即使您将其声明为
myservicecimpl
的实例变量,您仍然可以有多个线程访问
MyDAO


我仍然将您的
MyDAO
声明为实例变量,因为它占用的内存空间非常小。DAO应该没有太多(如果有的话)实例状态。这还应该确保它也是线程安全的。

首先,服务类不应该直接调用DAO实例

服务和DAO之间的交互应该始终通过接口进行,以便使其松散耦合

您可以在服务类中将DAO实例创建为singleton,并且是线程安全的(即spring框架默认使用singleton),确保DAO中不使用全局变量


如果将DAO对象设置为singleton,则创建的对象数量将非常少,从而提高性能。

如果daoInstance是静态的,并且假设有多个用户访问web应用程序中的同一someMethod()。行为是可预测的(线程安全的)吗?