定制弹簧镜?
有谁知道除了Servlet Context Scope和ThreadScope之外的任何其他自定义弹簧示波器?
如果你已经制作了一些闭源自定义范围,我真的也有兴趣听听它的作用以及它是如何为你工作的。(我想象有人会在桌面应用程序中制作WindowScope?
我对所有用例都持开放态度,我希望在这里扩展我的视野。
有谁知道除了Servlet Context Scope和ThreadScope之外的任何其他自定义弹簧示波器?
如果你已经制作了一些闭源自定义范围,我真的也有兴趣听听它的作用以及它是如何为你工作的。(我想象有人会在桌面应用程序中制作WindowScope?
我对所有用例都持开放态度,我希望在这里扩展我的视野。
我们实施了自己的定制弹簧示波器。我们的许多代码在相对较低的级别上工作,接近数据库,并且我们在其之上维护一个概念级别,其中包含自己的数据源,链接,属性等对象模型。
无论如何,很多bean需要一个所谓的StorageDictionary(这个对象图的封装)来完成它们的工作。当我们对对象图进行不平凡的更改时,字典有时需要被吹走并重新创建。因此,我们为字典范围的对象实现了自定义范围,并且给定字典的一部分失效涉及清除此自定义范围。这使Spring能够为这些对象处理一种很好的自动缓存形式。每次都会返回相同的对象,直到字典无效,此时您将获得一个新对象。
这不仅有助于提高一致性,还允许对象本身缓存对字典中实体的引用,只要Spring可以检索到它们本身,缓存就会有效。这反过来又允许我们将这些构建为不可变对象(只要它们可以通过构造函数注入进行连接),这是一件非常好的事情。
这种技术不会在任何地方都有效,并且在很大程度上取决于软件的特性(例如,如果定期修改字典,这将是非常低效的,如果它从未更新过,这将是不必要的,并且比直接访问效率略低)。但是,它确实帮助我们以一种概念上简单明了且在我看来相当优雅的方式将生命周期管理传递给了Spring。
在我的公司中,我们创建了两个自定义作用域,一个将使用“线程”或“请求”,另一个将使用“线程”或“会话”。这个想法是,单个作用域可用于作用域 Bean,而不必根据执行环境(JUnit 或 Servlet 容器)更改配置。当您在 Quartz 中运行项目并且不再具有可用的请求或会话范围时,这也确实派上了用场。