我在项目中有几个Sling servlet(实现SlingAllMethodsServlet或SlingSafeMethodsServlet),其中一些引用Sling服务:
public class MyServlet extends SlingAllMethodsServlet{
@Reference
private SlingSettingsService slingSettingsService;
}
现在,像Sonar这样的静态代码分析器告诉我使变量“slingSettingsService”成为瞬态或Serializable,因为Sling Servlet实现了Serializable:
public class MyServlet extends SlingAllMethodsServlet{
@Reference
private transient SlingSettingsService slingSettingsService;
}
作为替代方案,他们告诉我使引用的服务实现Serializable,但这对我来说似乎是不可能的。 将参考瞬态化是一个好主意吗?在哪种情况下,Sling servlet将被序列化和反序列化,并且引用的特征是否会被恢复?
答案 0 :(得分:1)
它几乎是来自servlet api的包袱。 AFAIK吊索servlet从未被序列化。此外,由于服务对象由scr管理,任何具有服务引用的osgi组件都不太可能在序列化和反序列化中存在。你应该忽略那个声纳规则。