Rumah >Java >javaTutorial >Cara menggunakan anotasi @AliasFor dalam SpringBoot
Atribut ini boleh dianotasi kepada dua atribut anotasi tersuai, menunjukkan bahawa kedua-dua atribut adalah alias untuk setiap satu lain, iaitu, ini Kedua-dua sifat itu sebenarnya mempunyai maksud yang sama.
Salah satu nama atribut mestilah "nilai"
Tidak kira nama atribut yang ditentukan untuk menetapkan nilai atribut, atribut yang lain nama juga merupakan nilai atribut yang sama, atau nama atribut lalai.
Jika kedua-duanya menyatakan nilai atribut, nilai yang diperlukan mestilah sama, jika tidak, ralat akan dilaporkan.
Mudah digunakan. Selepas menggunakannya seperti ini, @MyAnno(location="shanghai") boleh ditulis terus sebagai: @MyAnno("shanghai");
Sebab fungsi ini:
Jika anotasi tersuai mempunyai atribut, dan atribut dinamakan untuk mencerminkan maknanya, pemanggil mesti menulis atribut dan kemudian menetapkannya setiap kali dia menggunakan anotasi tersuai, yang sedikit menyusahkan.
Anotasi
package com.example.annotation; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) @Documented @Inherited public @interface MyAnnotation { @AliasFor(attribute = "location") String value() default ""; @AliasFor(attribute = "value") String location() default ""; }
Pengawal
rreeeUjian
Akses bahagian hadapan: http://localhost:8080/hello/test1
Hasil bahagian hadapan (nilai dan lokasi kedua-duanya adalah nilai yang sama)
nilai :location; loation:location
Bacaan dan penulisan atribut nilai anotasi anak sebenarnya Baca dan tulis nilai atribut anotasi induk. (Untuk atribut yang diwarisi)
Pada masa ini, hanya nilai atribut yang diwarisi boleh dibaca dan ditulis.
Anotasi
package com.example.controller; import com.example.annotation.MyAnnotation; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/hello") public class HelloController { @MyAnnotation(value = "location") /*//下边这两种写法结果与上边是相同的 @MyAnnotation("location") @MyAnnotation(location = "location")*/ @RequestMapping("/test1") public String test1() { MyAnnotation myAnnotation = null; try { myAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test1"), MyAnnotation.class); } catch (NoSuchMethodException e) { e.printStackTrace(); } return "value:" + myAnnotation.value() + ";loation:" + myAnnotation.location(); } }rrree
Pengawal
package com.example.annotation; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) @Documented @Inherited public @interface MyAnnotation { @AliasFor(attribute = "location") String value() default ""; @AliasFor(attribute = "value") String location() default ""; }
Ujian
Akses bahagian hadapan: http://localhost:8080/hello/testHasil
loasi(sub):lokasi(my )Penggunaan 3: Warisi atribut anotasi induk dan tulis semula nama atributPengenalan Pembacaan dan penulisan nilai atribut anotasi anak sebenarnya adalah bacaan dan penulisan nilai atribut anotasi induk. (Untuk atribut ganti) Tidak kira nama atribut mana yang ditentukan untuk menetapkan nilai atribut, nama atribut lain juga mempunyai nilai atribut yang sama dan nama atribut lalai tidak boleh digunakan. Jika kedua-duanya menyatakan nilai atribut, nilai yang diperlukan mestilah sama, jika tidak ralat akan dilaporkan. Kodlokasi:
lokasi:lokasi(saya)
Anotasi
package com.example.annotation; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) @Documented @Inherited @MyAnnotation public @interface SubMyAnnotation { @AliasFor(annotation = MyAnnotation.class) String location() default ""; // 这个不能写,只能有一个与父属性名同名的属性,否则报错 // @AliasFor(annotation = MyAnnotation.class) // String value() default ""; }rrree
Pengawal
package com.example.controller; import com.example.annotation.MyAnnotation; import com.example.annotation.SubMyAnnotation; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/hello") public class HelloController { @SubMyAnnotation(location = "location(my)") @RequestMapping("/test") public String test() { SubMyAnnotation subMyAnnotation = null; MyAnnotation myAnnotation = null; MyAnnotation myAnnotation1 = null; try { subMyAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test"), SubMyAnnotation.class); myAnnotation = AnnotationUtils.getAnnotation(this.getClass().getMethod("test"), MyAnnotation.class); myAnnotation1 = AnnotatedElementUtils.getMergedAnnotation(this.getClass().getMethod("test"), MyAnnotation.class); } catch (NoSuchMethodException e) { e.printStackTrace(); } return "loation(sub):" + subMyAnnotation.location() + "\n" + "location:" + myAnnotation.location() + "\n" + "location:" + myAnnotation1.location(); } }
UjianAkses bahagian hadapan: http://localhost:8080/hello/test
HasilsubValue:subLocation;subLoation:subLocation
nilai:;lokasi:nilai:subLokasi;lokasi:subLokasi
Atas ialah kandungan terperinci Cara menggunakan anotasi @AliasFor dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!