SpringBoot?AnnotationUtils工具類的使用實(shí)例詳解
一. 前期準(zhǔn)備
?若干自定義注解
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface PayCode {
// 支付方法的業(yè)務(wù)code
String payCode();
// 支付方法的名稱
String name();
}import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface PayOrder {
int value() default 0;
}import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface Version {
String value() default "0";
}二. 使用自定義注解標(biāo)記業(yè)務(wù)方法
@PayCode(payCode = "alia", name = "支付寶支付")
@Component
public class AliaPay {
@PayOrder(value = 1)
public void pay() {
System.out.println("===發(fā)起支付寶支付1===");
}
}@PayCode(payCode = "jingdong", name = "京東支付")
@Component
public class JingDongPay {
@Version(value = "1.1")
public String version;
@PayOrder(value = 20)
public void pay() {
System.out.println("===發(fā)起京東支付===");
}
}三. 原生Java獲取注解
import org.springframework.boot.CommandLineRunner;
import org.springframework.util.ReflectionUtils;
@Component
public class ZTestController implements CommandLineRunner {
@Resource
private AliaPay aliaPay;
@Resource
private JingDongPay jingDongPay;
@Override
public void run(String... args) throws Exception {
// ?原生Java的方式獲類上的注解
PayCode aliPay = aliaPay.getClass().getAnnotation(PayCode.class);
System.out.println(aliPay);
// @com.example.jmw.common.annotation.PayCode(payCode=alia, name=支付寶支付)
// ?原生Java的方式獲取屬性上的注解
Field versionField = ReflectionUtils.findField(jingDongPay.getClass(), "version");
Version version = versionField.getAnnotation(Version.class);
}
}四. AnnotationUtils工具類獲取
4.1 AnnotationUtils.findAnnotation獲取類注解
// AnnotationUtils的方式獲取指定類上的注解 import org.springframework.core.annotation.AnnotationUtils; PayCode aliPay = AnnotationUtils.findAnnotation(aliaPay.getClass(), PayCode.class);
4.2 AnnotationUtils.findAnnotation獲取方法注解
import org.springframework.util.ReflectionUtils; import org.springframework.core.annotation.AnnotationUtils; // 通過反射獲取aliaPay對(duì)象上的pay方法的Method對(duì)象 Method payMethod = ReflectionUtils.findMethod(aliaPay.getClass(), "pay"); // 獲取方法上的注解 PayOrder payOrder = AnnotationUtils.findAnnotation(payMethod, PayOrder.class);
4.3 AnnotationUtils.getValue獲取注解上的指定屬性值
// AnnotationUtils的方式獲取指定類上的注解 PayCode aliPayAnnotation = AnnotationUtils.findAnnotation(aliaPay.getClass(), PayCode.class); // 獲取注解上指定的值 Object payCode = AnnotationUtils.getValue(aliPayAnnotation, "payCode");
4.4 AnnotationUtils.getAnnotationAttributes獲取注解上的所有屬性值
// 獲取注解上所有的屬性值 PayCode aliPay = AnnotationUtils.findAnnotation(aliaPay.getClass(), PayCode.class); Map<String, Object> annotationAttributes = AnnotationUtils.getAnnotationAttributes(aliPay);
到此這篇關(guān)于SpringBoot AnnotationUtils工具類的使用的文章就介紹到這了,更多相關(guān)SpringBoot AnnotationUtils工具類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java8新特性之lambda的作用_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
我們期待了很久lambda為java帶來(lái)閉包的概念,但是如果我們不在集合中使用它的話,就損失了很大價(jià)值。現(xiàn)有接口遷移成為lambda風(fēng)格的問題已經(jīng)通過default methods解決了,在這篇文章將深入解析Java集合里面的批量數(shù)據(jù)操作解開lambda最強(qiáng)作用的神秘面紗。2017-06-06
idea啟動(dòng)報(bào)錯(cuò):Command line is too long問題
在使用IDEA時(shí),若遇到"Commandlineistoolong"錯(cuò)誤,通常是因?yàn)槊钚虚L(zhǎng)度超限,這是因?yàn)镮DEA通過命令行或文件將classpath傳遞至JVM,操作系統(tǒng)對(duì)命令行長(zhǎng)度有限制,解決方法是切換至動(dòng)態(tài)類路徑,通過修改項(xiàng)目的workspace.xml文件2024-09-09
Java?json轉(zhuǎn)換實(shí)體類(JavaBean)及實(shí)體類(JavaBean)轉(zhuǎn)換json代碼示例
這篇文章主要介紹了兩種常見的JSON與Java實(shí)體類相互轉(zhuǎn)換的方法,分別是使用庫(kù)Jackson、Gson、Fastjson和在線工具,無(wú)論是將JSON轉(zhuǎn)換為Java實(shí)體類還是將Java實(shí)體類轉(zhuǎn)換為JSON,這些方法都能顯著簡(jiǎn)化開發(fā)過程,需要的朋友可以參考下2024-12-12
Java實(shí)現(xiàn)word/pdf轉(zhuǎn)html并在線預(yù)覽
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)word、pdf文件轉(zhuǎn)html并在線預(yù)覽的功能,文中的示例代碼講解詳細(xì),需要的可以參考一下2023-05-05
Java用?Gradle配置compile及implementation和api的區(qū)別
這篇文章主要介紹了Java用Gradle配置compile及implementation和api的區(qū)別,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
Java實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)提取所需知識(shí)點(diǎn)
這篇文章主要介紹了Java實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)提取所需知識(shí)點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
springBoot連接遠(yuǎn)程Redis連接失敗的問題解決
本文主要介紹了springBoot連接遠(yuǎn)程Redis連接失敗的問題解決,使用springboot里面的redisTemplate進(jìn)行連接的時(shí)候,卻發(fā)生了報(bào)錯(cuò),下面就來(lái)一起解決一下2024-05-05

