我不知道如何啓動它。我有一個荒謬的NullPointerException
在一個不應該的地方。由於情況看起來很不正常,我不期待太多答案,但問題和答案(如果我終於找到答案)可能對教育目的有用。如果不會,我可能會刪除該問題。訪問final字段時出現奇怪的NullPointerException
Caused by: java.lang.NullPointerException
at com.ah.dao.hbase.Snapshotable.lock(Snapshotable.java:17)
at com.ah.pipeline.dump.DumpController.dump(DumpController.java:78)
07: public abstract class Snapshotable {
08: private final AtomicBoolean readonly = new AtomicBoolean(false);
09:
10: abstract public TableSuit getTableInfo();
11:
12: public boolean locked() {
13: return readonly.get();
14: }
15:
16: public final void lock() {
17: readonly.set(true); <-- happens here
18: }
19:
20: public final void release() {
21: readonly.set(false);
22: }
23: }
起初readonly
變量是不是最終的,所以我雖然它可能是不安全的出版效果,但現在我沒有任何想法。在我們的代碼中沒有這些變量的反射技巧,但是這個類的後代的一些方法是用aspectj代理的。
更新AOP的細節
@Service
public class HDao extends Snapshotable {
@PerformanceMonitoring
public void save(PatchEvent patchEvent) {
if (locked()) {
throw new DumpException(tableName);
}
@Aspect
@Component
public class PMAdvice {
@Around(value = "@annotation(performanceMonitoring)", argNames = "jp, p")
public Object saveEvent(ProceedingJoinPoint jp, PerformanceMonitoring p) throws Throwable {
// basic stuff
根據您發佈的代碼中缺少某些內容的假設,當我收到此類NullPointerException時,通常會查找自動拆箱空值。 – EasterBunnyBugSmasher
_ **但這個類的後代的一些方法是用aspectj ** _代表的,它都在某處。沒有它就說不清。 –
你可以嘗試看看反編譯方面的類(我認爲https://eclipse.org/aspectj/doc/released/pdguide/ltwdump.html#ltwdump-假設你使用ltw。運行時代理應該出現在stacktrace,也抱怨最終的方法) – zapl