[英]Java annotation execute a method within the annotation declaration(usage for android)
我對注釋術語相當新。 我已經閱讀了一些消息來源並得出結論,我沒有回答我的問題。 也許我使用錯誤的搜索來搜索。 也許我忽略了,或者我可能只是無能為力..
無論如何這里是交易。
我正在忙着編寫一個需要“角色驗證”的應用程序。
為此,我想使用注釋。
所以有以下幾點:
@interface Validate (){
}
我的目標是實現以下目標:
public @interface Validate() {
public Validate() {
//Do validation stuff
return true/false
}
}
所以基本上我想在注釋中定義方法。 我希望能夠打電話
@Validate
public void methodThatRequiresAdminRole() {
doStuff();
}
只有管理員才能輸入此方法。 否則應生成錯誤。
因此,如果@validate返回true,則應執行該方法
對不起,如果我真的不清楚。 我不太確定如何正確地問我想要什么。 所以我希望這些例子講述這些故事。
希望盡快閱讀提示甚至答案。 謝謝。
**編輯**
我需要強調的是,代碼必須在Android應用程序上使用。 所以我更喜歡不使用不適合android的奇怪框架。 我沒有問題添加一個自定義庫,它提供了沒有任何應用程序框架的功能。
注釋是元數據。 您需要編寫的是注釋處理器。 注釋本身無法完成驗證邏輯。 注釋處理器將查看注釋,然后執行驗證並控制應用程序流。 這個SO答案有一個很好的解釋Java Java Annotations可以幫助我嗎?
您還需要使用@Retention(RetentionPolicy.RUNTIME)注釋注釋,以便保留注釋信息直到運行時。
@Retention(RetentionPolicy.RUNTIME)
public @interface Validate() {
}
請注意,這可能是非常偏離主題的。 使用spring AOP ,處理注釋非常簡單:
創建一個方面:
@Aspect
public class RoleCheckAspect {
@Before("@annotation(your.package.Validate)")
public void doAccessCheck() throws Exception {
// Do validation stuff
if (!valid)
throw new IllegalAccessException("foo");
}
}
}
設置你的方面:
在META-INF / aop.xml中
<!DOCTYPE aspectj PUBLIC
"-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
<weaver>
<!-- only weave classes in our application-specific packages -->
<include within="your.package..*" />
</weaver>
<aspects>
<!-- weave in just this aspect -->
<aspect name="com.bac.bsl.nonproc.TestAspect" />
</aspects>
</aspectj>
設置加載時間編織
在春天的背景下:
<context:load-time-weaver/>
確保使用您的應用啟動spring-agent:
java -javaagent:/path/to/spring-agent.jar -classpath $CP your.package.MyApp
我不認為你可以單獨使用注釋來實現這一點。 它們旨在提供有關代碼元素的元信息,而不是處理邏輯。 要實際實現對帶注釋的方法調用的限制,您需要在方法內部或外部手動檢查訪問權限,或者使用類似http://www.eclipse.org/aspectj/的內容注入此類檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.