任何人都知道除Servlet Context Scope和ThreadScope之外的任何其他自定义弹簧范围?
如果你已经制作了一些闭源自定义范围,我真的也有兴趣听听它的作用以及它是如何为你制定的.(我想有人会在桌面应用程序中制作一个WindowScope?)
我对所有用例持开放态度,我希望在这里拓展我的视野.
我们实现了自己的自定义Spring作用域.我们的许多代码都在相对较低的层次上工作,靠近数据库,并且我们使用自己的数据源,链接,属性等对象模型来维护概念级别.
无论如何,很多bean需要一个所谓的StorageDictionary(这个对象图的封装)来完成他们的工作.当我们对对象图进行非平凡的更改时,有时需要将字典吹走并重新创建.因此,我们为字典范围的对象实现了自定义范围,并且给定字典的部分失效涉及清除此自定义范围.这让Spring为这些对象处理了一种很好的自动缓存形式.每次都会返回相同的对象,直到字典失效,此时您将获得一个新对象.
这不仅有助于一致性,而且还允许对象本身缓存对字典内实体的引用,只要它们本身可由Spring检索,就可以安全地知道缓存有效.这反过来让我们将它们构建为不可变对象(只要它们可以通过构造函数注入进行连接),尽管如此,这是一件非常好的事情.
这种技术无处不在,并且在很大程度上取决于软件的特性(例如,如果字典经常被修改,这将是非常低效的,并且如果它被更新,那么这将是不必要的并且比直接访问稍微低效).但是,它确实帮助我们以一种概念上简单明了的方式将生命周期管理权交给Spring,在我看来相当优雅.