Java執行時反射修改註解值
阿新 • • 發佈:2018-12-21
Java實現執行時修改註解值
由於java的註解不能傳參,而專案中經常需要將執行中動態值傳到註解中,因為需要在執行中修改註解的值,達到我們想要的目的。再次記錄我專案中實現java通過反射實現執行時修改註解值。
實踐
private void changeTimerConfig() { try { Method doJob = SynTaskTimer.class.getMethod("doJob"); Scheduled annotation = doJob.getAnnotation(Scheduled.class); if (annotation != null){ InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation); Field values = invocationHandler.getClass().getDeclaredField("memberValues"); values.setAccessible(true); Map<String, Object> memberValues =(Map<String, Object>) values.get(invocationHandler); long val = (long) memberValues.get("fixedRate"); System.out.println("改變前:" + val); memberValues.put("fixedRate", SysConfig.schedulerRate); System.out.println("改變後:" + annotation.fixedRate()); } } catch (Exception e) { e.printStackTrace(); } }*
membervalues
為JDK中儲存所有成員變數值的Map