我想更好地了解如何以及何时在Spring中使用原型范围。似乎与EJB世界中的无状态会话bean的处理方式类似(尽管EJB容器会从无状态会话bean池中释放一个实例,而不是按需创建新实例)。
我有几个基本问题:
1)从架构的角度来看,何时在典型的J2EE Web应用程序(Spring MVC / Hibernate或JDBC模板数据库访问)中使用原型范围的bean是有意义的?
2)是否存在创建此类原型实例池的概念,类似于EJB服务器对无状态会话Bean执行的池化?
3)是否应该使用原型范围创建服务外观(类似于EJB中的Session Facade),这有助于处理来自Web层的并发请求吗?如何控制创建的实例数量(限制为某些可管理的数量,最好是将它们汇集起来)?
答案 0 :(得分:1)
假设您的服务是无国籍的,您会希望单身人士获得服务。这样你每个服务只有一个实例,因为它们是无状态的,所以它们是线程安全的。
您需要原型来处理请求操作(例如在struts中),因此会创建一个新对象来处理每个请求。这些原型可以连接到单件服务。
非单例,bean部署的原型范围导致了 每次请求特定时,都会创建一个新的bean实例 豆是制作的。也就是说,bean被注入另一个bean或你 通过对容器的getBean()方法调用来请求它。作为一个 规则,使用所有有状态bean和单例的原型范围 无状态豆的范围。