2014-11-25 105 views
0

我有一個類。這樣的事情:每個註釋在構造函數後自動設置屬性

public class Example { 
    public Example() { 
    System.out.println("Constructor"); 
    } 
} 

現在我想要一個屬性「版本」,它是在施工後自動給出。是否有可能根據註釋解決它?最好的解決方案是,如果我可以在某些類上面編寫像@VersionControl這樣的註釋,然後另一個模塊爲這些類設置屬性「版本」。

事情是這樣的:

@VersionControl 
public class Example { 

    int version; //this should be set automatically 

    public Example() { 
    System.out.println("Constructor"); 
    } 
} 

這可能嗎? Thx爲您提供幫助!

+0

當然。查看允許字節碼重寫的AspectJ或庫。但就目前而言,您的問題非常廣泛,可能不適合SO。 – 2014-11-25 12:08:45

+0

感謝您的評論。我將看看AspectJ並嘗試自己回答我的問題。 – mrclrchtr 2014-11-25 13:37:11

回答

0

我與註釋和AspectJ溶液:

譯註:

@Target(ElementType.TYPE) 
    public @interface MyAnnotation{ 
} 

看點:

@Aspect 
public class MyAspect { 

    @Pointcut("execution((@MyAnnotation *).new(..))") 
    public void bla() { 
    } 

    @After("bla()") 
    public void after(JoinPoint joinPoint) { 
    try { 
    joinPoint.getTarget().getClass().getDeclaredField("version").set(joinPoint.getTarget(), VersionProvider.getVersion()); 
    } catch (IllegalAccessException | NoSuchFieldException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

實施例目的:

@MyAnnotation 
public class Example { 

public long version; 

public long getDarwinVersion() { 
    return version; 
} 

} 

在這種解決方案中,versio n將在註釋類的構造函數被調用後設置。

相關問題