Spring有单身和原型。 EJB有单例和无状态。
我一直在研究EJB,因为我认为EJB中的单例意味着多个用户无法同时访问该类。因此,用户将一直等到资源空闲。因此总是使用无状态。
来到Spring,没有相当于EJB无状态的东西。默认情况下,一切都是单身,如果用作原型则是新的。那么当多个用户试图同时访问同一个单例bean时会发生什么。他们一直在等吗?
也许我的Java基础知识在这里并不清楚。 当多个用户尝试访问同一个java单例类或同一个java单例类的相同方法时会发生什么。它在内部如何运作?通过这里的java singleton,我的意思是一个带有私有构造函数的类。
在EJB中使用Singleton和Stateless吗?
答案 0 :(得分:2)
我一直在研究EJB,因为我认为EJB中的单例意味着多个用户无法同时访问该类。因此,用户将一直等到资源空闲。因此总是使用无状态。
多个线程可以同时使用相同的单例bean。 https://docs.oracle.com/cd/E19798-01/821-1841/gipsz/index.html
来到Spring,没有相当于EJB无状态的东西。
也许没有注释,但行为是一样的。
也许我的Java基础知识在这里并不清楚。当多个用户尝试访问同一个java单例类或同一个java单例类的相同方法时会发生什么。它在内部如何运作?通过这里的java singleton,我的意思是一个带有私有构造函数的类。
正如其他用户所说,拥有私人构造函数的类不一定是单身。 我首选的单身人士是:
private static final UserType INSTANCE = new UserType();
private UserType(){
}
public static UserType get(){
return INSTANCE;
}
多个线程可以使用java单例,实例化后没有同步。
在EJB中使用Singleton和Stateless吗?
绝对不是。无状态bean有一个实例池。 Singleton bean只有一个,作为java单例对象。但是关于并发性,是的,两者都不会阻止线程。
答案 1 :(得分:1)
我假设你在谈论一个Web应用程序。当在servlet容器中运行的Web应用程序时,每个用户请求都会创建一个具有自己的Stack的单独线程。因此,单个类的方法可以由多个并发线程执行。这是Java虚拟机的美妙之处。这允许并发用户访问相同的代码而不会相互阻塞。
答案 2 :(得分:1)
当多个用户尝试访问相同内容时会发生什么 单独的豆子。他们一直在等吗?
不要将synchronized
与单身人士混为一谈。当然,多个线程可以同时访问Spring Bean。
当多个用户尝试访问同一个java时会发生什么 单例类或相同java单例类的相同方法。
没什么,但如果你的Singleton类有实例或类变量,那么线程将同时访问它们。