Rumah > Java > javaTutorial > Cara menggunakan anotasi @AliasFor dalam SpringBoot

Cara menggunakan anotasi @AliasFor dalam SpringBoot

王林
Lepaskan: 2023-05-18 21:46:04
ke hadapan
1711 orang telah melayarinya

Penggunaan 1: Atribut anotasi adalah alias untuk satu sama lain

Pengenalan

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.

Instance

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 "";
}
Salin selepas log masuk
Salin selepas log masuk

Pengawal

rreee

Ujian

Akses bahagian hadapan: http://localhost:8080/hello/test1

Hasil bahagian hadapan (nilai dan lokasi kedua-duanya adalah nilai yang sama)

nilai :location; loation:location

Penggunaan 2. Warisi atribut anotasi induk tanpa menulis semula nama atribut

Pengenalan

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.

Kod

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();
    }
}
Salin selepas log masuk
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 "";
}
Salin selepas log masuk
Salin selepas log masuk

Ujian< >< >

Akses bahagian hadapan: http://localhost:8080/hello/test

Hasil

loasi(sub):lokasi(my )

lokasi:
lokasi:lokasi(saya)

Penggunaan 3: Warisi atribut anotasi induk dan tulis semula nama atribut

Pengenalan

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.

Kod

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 "";
}
Salin selepas log masuk
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();
    }
}
Salin selepas log masuk

UjianAkses bahagian hadapan: http://localhost:8080/hello/test

Hasil

subValue: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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan