2014-09-21 70 views
0

我有以下類: 包ajia.messaging;AspectJ反彙編

public class MessageCommunicator { 
    public void deliver(String message) { 
     System.out.println(message); 
    } 

    public void deliver(String person, String message) { 
     System.out.println(person + ", " + message); 
    } 
} 

及以下建議:

package ajia.security; 
import ajia.messaging.MessageCommunicator; 

public aspect SecurityAspect { 
    private Authenticator authenticator = new Authenticator(); 

    pointcut secureAccess() 
     : execution(* MessageCommunicator.deliver(..)); 

    before() : secureAccess() { 
     System.out.println("Checking and authenticating user"); 
     authenticator.authenticate(); 
    } 
} 

我編譯一切都像這樣 - ajc -source 5 ajia\messaging\MessageCommunicator.java ajia\security\SecurityAspect.aj

按照我的理解所產生的MessageCommunicator.class將已經列入方面的代碼。如果標準的java反編譯器會正確地反編譯這個類,我是在流浪嗎?

+0

你爲什麼不試試看? – hexafraction 2014-09-21 12:17:05

+0

那麼,我剛剛做了,用JAD反編譯,確實有效。可以看到一切。 – 2014-09-21 12:33:52

回答

0

反編譯往往通過識別由編譯器產生的模式工作。 AspectJ試圖產生遵循相同類型模式的代碼(catch塊的字節代碼的結構,即那種類型)。所以通常情況下,代碼將反編譯好,除非一些瘋狂的編織已經開始。 AspectJ項目將接受有關代碼的錯誤報告,這些代碼不是完全可分解的,並試圖解決它。

0

是的,它的工作原理,至少有JAD反編譯

+0

我建議你要麼接受你自己的答案,要麼只是刪除整個問題。 – kriegaex 2014-09-21 17:14:33