摘要:對自動裝配的支持對自動裝配的支持之前還沒有注解功能,在版本才正式加入了對注解機制的支持。注解相當于一種標記,允許程序在運行時動態地對擁有該標記的成員進行操作。
??在編寫 SpringMVC Demo 的過程中,對自動裝配有一種莫名的興奮感,只要容器中有相對應的 Bean ,通過 @Autowire 注解,自動會將對應的 Bean 注入到相關的屬性中,著的確是一個很強大的機制,但是在使用的過程中,也遇到了許多問題,其中有一個是,如果這個屬性的類型有多個實現 Bean,那應該注入哪一個Bean呢,翻了很多資料也沒有,只能夠自己看源碼,找答案。
Java 對自動裝配的支持
Java 對自動裝配的支持??JDK1.5之前還沒有注解功能,在1.5版本才正式加入了對注解機制的支持。
??注解相當于一種標記,允許程序在運行時動態地對擁有該標記的成員進行操作。
??百度百科里對注解功能的解釋是:
編寫文檔:通過代碼里標識的元數據生成文檔【生成文檔doc文檔】
代碼分析:通過代碼里標識的元數據對代碼進行分析【使用反射】
編譯檢查:通過代碼里標識的元數據讓編譯器能夠實現基本的編譯檢查【Override】
??因此 Spring基于 JDK1.5,實現了注解功能。
那么現在我們通過自行編碼,簡單實現 Spring 自動裝配的功能:
自定義注解:
/** * 自定義注解,用來配置方法 */ @Retention(RetentionPolicy.RUNTIME) // 表示注解在運行時依然存在 @Target(ElementType.METHOD) // 表示注解可以被使用于方法上 public @interface SayHiAnnotation { String paramValue() default "johness"; // 表示我的注解需要一個參數名為"paramValue" 默認值為"johness"
自動裝配:
/** * 要使用SayHiAnnotation的元素所在類 * 由于我們定義了只有方法才能使用我們的注解,我們就使用多個方法來進行測試 */ public class SayHiEmlement { // 普通的方法 public void SayHiDefault(String name){ System.out.println("Hi, " + name); } // 使用注解并傳入參數的方法 @SayHiAnnotation(paramValue="Jack") public void SayHiAnnotation(String name){ System.out.println("Hi, " + name); } // 使用注解并使用默認參數的方法 @SayHiAnnotation public void SayHiAnnotationDefault(String name){ System.out.println("Hi, " + name); } }
測試代碼:
public class AnnotionOperator { public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException { SayHiEmlement element = new SayHiEmlement(); // 初始化一個實例,用于方法調用 Method[] methods = SayHiEmlement.class.getDeclaredMethods(); // 獲得所有方法 for (Method method : methods) { SayHiAnnotation annotationTmp = null; if((annotationTmp = method.getAnnotation(SayHiAnnotation.class))!=null) // 檢測是否使用了我們的注解 method.invoke(element,annotationTmp.paramValue()); // 如果使用了我們的注解,我們就把注解里的"paramValue"參數值作為方法參數來調用方法 else method.invoke(element, "Rose"); // 如果沒有使用我們的注解,我們就需要使用普通的方式來調用方法了 } }
測試結果:
SayHiAnnotation()//Hi, Jack SayHiAnnotationDefault() //Hi, johness SayHiDefault()//Hi, Rose
可以看出,Spring 則是基于注解和反射 自行自動裝配
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67414.html
摘要:跳槽時時刻刻都在發生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來期間也沒有準備充分,到底是因為技術原因影響自己的發展,偏移自己規劃的軌跡,還是錢給少了,不受重視。 跳槽時時刻刻都在發生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來(期間也沒有準備充分),到底是因為技...
摘要:配置開啟注解模式簡化配置自動注冊默認提供了一系列的功能數據綁定數字和日期的轉換的讀寫支持映射路徑靜態資源默認配置加入對靜態資源的處理允許使用做整體配置映射后面的和類基本上都要自動包掃描,讓認識然后就可以盡情的使用了。 花了點時間做的(比較水)筆記,有可能有漏洞,有不對的,歡迎指出(如果你會看的話)。 首先都是二話不說,先找依賴(Gradle): // spring系列 // 這個jar...
摘要:分發處理器將會掃描使用了該注解的類的方法,并檢測該方法是否使用了注解。的作用相當于,只不過按照自動注入。作用該注解用于將的方法返回的對象,通過適當的轉換為指定格式后,寫入到對象的數據區。用于注解層,在類上面注解。 原文地址 Controller 在SpringMVC中,控制器Controller負責處理由DispatcherServlet分發的請求,它把用戶請求的數據經過業務處理層處理...
摘要:當容器啟動或終止應用時,會觸發事件,該事件由來處理。監聽器的作用就是啟動容器時,自動裝配的配置信息。初始化在架構中,負責請求分發,起到控制器的作用。 ??公司項目使用 struts2 作為控制層框架,為了實現前后端分離,計劃將 struts2 切換為 SpringMVC ,因此,這段時間都在學習新的框架,《Spring實戰》是一本好書,里面對 Spring 的原理實現以及應用都說得很透...
摘要:先用一個圖來表示基本流程圖這個網上很容易找到基本流程圖用戶發送請求到前端控制器前端控制器是的重要部分,位于中心,提供整個框架訪問點,起到交換的作用,而且與容器集成。在配置這個監聽器,啟動容器時,就會默認執行它實現的方法。 先用一個圖來表示基本流程圖這個網上很容易找到 基本流程圖 showImg(https://segmentfault.com/img/bVbfDiV?w=1340&h...
閱讀 3475·2021-10-13 09:39
閱讀 1458·2021-10-08 10:05
閱讀 2260·2021-09-26 09:56
閱讀 2275·2021-09-03 10:28
閱讀 2673·2019-08-29 18:37
閱讀 2032·2019-08-29 17:07
閱讀 600·2019-08-29 16:23
閱讀 2191·2019-08-29 11:24