『壹』 java 註解處理器
註解不用什麼調用。註解只是以便你以後查看方法,或者讓別人看你的介面方便而已。比如你在方法前寫一個注釋
/**
*這里寫方法名稱,或者是用途
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
像這樣,以後你在調用這個方法時,就能在方法那裡看到方法的解釋
『貳』 如何使用Java註解處理器
註解的使用一般是與java的反射一起使用,下面是一個例子註解相當於一種標記
『叄』 java註解如何自動觸發
沒有自動觸發一說, 總有那麼一段程序都 把這些註解信息給提出來,然後跑它的功能。 只是說有些框架提供了這些功能,你不用自己去寫了,只需要 配置就好了。 不同的框架是不一樣的不能給我講
『肆』 註解的JAVA中的註解
java.lang.annotation.Retention可以在您定義Annotation型態時,指示編譯器如何對待您的自定義 Annotation,預設上編譯器會將Annotation資訊留在class檔案中,但不被虛擬機器讀取,而僅用於編譯器或工具程式運行時提供資訊。
在使用Retention型態時,需要提供java.lang.annotation.RetentionPolicy的列舉型態:
package java.lang.annotation;
public enum RetentionPolicy {
SOURCE, //編譯器處理完Annotation資訊後就沒事了
CLASS, //編譯器將Annotation儲存於class檔中,預設
RUNTIME //編譯器將Annotation儲存於class檔中,可由VM讀入
}
RetentionPolicy為SOURCE的例子是SuppressWarnings,這個資訊的作用僅在告知編譯器抑制警訊,所以不必將這個資訊儲存於class檔案。
RetentionPolicy為RUNTIME的時機,可像是您使用Java設計一個程式碼分析工具,您要VM讀出Annotation資訊,以在分析程式中使用,搭配Reflection機制,就可以達到這個目的。
在J2SE 5.0中新增了java.lang.reflect.AnnotatedElement這個界面,當中定義有四個方法:
public Annotation getAnnotation(Class annotationType);
public Annotation[] getAnnotations();
public Annotation[] getDeclaredAnnotations();
public boolean isAnnotationPresent(Class annotationType);
Class、Constructor、Field、Method、Package等類別,都實作了AnnotatedElement這個介面,所以您可以從這些類別的實例上,分別取得標示於其上的Annotation與其資訊,如果RetentionPolicy為RUNTIME的話。
舉個例子來說,假設您設計了以下的Debug Annotation:
* Debug.java
package onlyfun.caterpillar;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Debug {
String value();
String name();
}
由於RetentionPolicy為RUNTIME,編譯器在處理Debug Annotation時,會將之編譯至class檔中,並可以VM讀出Annotation資訊,接著我們將Debug用於程式中:
* SomeObject.java
package onlyfun.caterpillar;
public class SomeObject {
@Debug(
value = unit,
name = debug1
)
public void doSomething() {
// ....
}
}
可以設計一個工具程式來讀取Annotation資訊:
* DebugTool.java
package onlyfun.caterpillar;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
public class DebugTool {
public static void main(String[] args)
throws NoSuchMethodException {
Class<SomeObject> c = SomeObject.class;
Method method = c.getMethod(doSomething);
if(method.isAnnotationPresent(Debug.class)) {
System.out.println(@Debug is found.);
Debug debug = method.getAnnotation(Debug.class);
System.out.println( value = + debug.value());
System.out.println( name = + ());
}
else {
System.out.println(@Debug is not found.);
}
Annotation[] annotations = method.getAnnotations();
for(Annotation annotation : annotations) {
System.out.println(
annotation.annotationType().getName());
}
}
}
程式的執行結果如下:
@Debug is found.
value = unit
name = debug1
onlyfun.caterpillar.Debug
『伍』 深入淺出Java註解 / Java註解是如何工作的
給java註解下個定義
用一個詞就可以描述註解,那就是元數據,即一種描述數據的數據。所以,可以說註解就是源代碼的元數據。Annotation是一種應用於類、方法、參數、變數、構造器及包聲明中的特殊修飾符。它是一種由JSR-175標准選擇用來描述元數據的一種工具。
註解的本質
Annotations僅僅是元數據,和業務邏輯無關。理解起來有點困難,但就是這樣。如果Annotations不包含業務邏輯,那麼必須有人來實現這些邏輯。元數據的"使用者"來做這個事情。Annotations僅僅提供它定義的屬性(類/方法/包/域)的信息。Annotations的"使用者"(同樣是一些代碼)來讀取這些信息並實現必要的邏輯。當我們使用Java的標注Annotations(例如@Override)時,JVM就是一個「使用者」,它在位元組碼層面工作。mok:"當我們使用用於Servlet的註解(例如@WebInitParam)時,容器就是一個'使用者';當我們使用框架提供的註解時,框架中的某個組件會負責做讀取後的邏輯處理。"
『陸』 java註解失效
如果子類要繼承父類的註解,那麼這個註解必須有 @Inherited 標記。
『柒』 在java代碼中,看到註解,如何查看註解處理器
搜索引用,eclipse 中右鍵references,然後找一下
『捌』 java註解是怎麼實現的
1、構造方法上加註解和普通方法加註解是一樣的在構造方法定義前加 @註解類型就像行了。
public class Car {
@Deprecated
public Car() {
}
}
2、java語義規定註解類不能定義構造方法。可以使用default 關鍵字規定默認值,規定了默認值在使用時就可以省略屬性賦值。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
@Inherited
public @interface Auth {
/**
* 是否驗證登陸 true=驗證 ,false = 不驗證
* @return
*/
public boolean verifyLogin() default true;
/**
* 是否驗證URL true=驗證 ,false = 不驗證
* @return
*/
public boolean verifyURL() default true;
}
『玖』 java 註解處理器(AbstractProcessor) 獲取到 指定註解的屬性值 javapoet 如何使用這個值生成類
定義:註解(Annotation),也叫元數據。一種代碼級別的說明。它是JDK1.5及以後版本引入的一個特性,與類、介面、枚舉是在同一個層次。它可以聲明在包、類、欄位、方法、局部變數、方法參數等的前面,用來對這些元素進行說明,注釋。
『拾』 java @註解 可以刪除嗎
java@註解可以刪除。
如果是自己寫的代碼覺得特別沒用了可以刪掉,如果是別人的,或者是修改需求什麼的可以不用刪,當你在改代碼把以前的注掉時寫個備注說明,以防以後再需要或者是想看下之前的想法。所以最好不要刪掉。
簡單性:
Java看起來設計得很像C++,但是為了使語言小和容易熟悉,設計者們把C++語言中許多可用的特徵去掉了,這些特徵是一般程序員很少使用的。例如,Java不支持goto語句,代之以提供break和continue語句以及異常處理。
Java還剔除了C++的操作符過載(overload)和多繼承特徵,並且不使用主文件,免去了預處理程序。因為Java沒有結構,數組和串都是對象,所以不需要指針。Java能夠自動處理對象的引用和間接引用,實現自動的無用單元收集。