最近,我研究了Spring的安全性,有一些类和方法命名为Deferring-
和Deferred-
。
对于实施例
- DeferredSecurityContext
- SupplierDeferredSecurityContext
- 延迟观察React授权管理器
- 延迟观察授权管理器
等
类或方法的常见模式是使用Supplier
函数接口和从提供者函数获取对象。像这样。
final class DeferringObservationAuthorizationManager<T> implements AuthorizationManager<T> {
private final Supplier<AuthorizationManager<T>> delegate;
DeferringObservationAuthorizationManager(ObjectProvider<ObservationRegistry> provider, AuthorizationManager<T> delegate) {
this.delegate = SingletonSupplier.of(() -> {
ObservationRegistry registry = (ObservationRegistry)provider.getIfAvailable(() -> {
return ObservationRegistry.NOOP;
});
return (AuthorizationManager)(registry.isNoop() ? delegate : new ObservationAuthorizationManager(registry, delegate));
});
}
public AuthorizationDecision check(Supplier<Authentication> authentication, T object) {
return ((AuthorizationManager)this.delegate.get()).check(authentication, object);
}
}
个字符
我对这个模式很好奇。为什么不直接使用示例?当我们在lambda函数中包含对象并推迟使用时有什么好处吗?
- 这个模式的目的是什么?
- 我们从这种模式中得到了什么好处?
- 有没有好的例子来了解这种模式的好处或解决一些问题?
请告诉我谢谢
1条答案
按热度按时间cfh9epnr1#
延迟(推迟)资源的创建是一种模式,用于优化代码,直到显式请求才创建资源。
因此,您所展示的代码不会创建一个
SecurityCContext
,直到它被显式地请求,然后才开始创建。在您的另一个示例中,ObservationRegistry
也是如此。这带来了一个小的一次性运行时成本,但好处是,例如缩短服务器的启动时间。