欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java反射機制在Spring IOC中的應用詳解

 更新時間:2021年09月27日 09:56:04   作者:小草mlc  
這篇文章主要介紹了Java反射機制在Spring IOC中的應用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java反射機制在Spring IOC的應用

IOC:即“控制反轉”,不是什么技術,而是一種思想。使用IOC意味著將你設計好的對象交給容器控制,而不是傳統(tǒng)的在你的對象內部直接控制。

本篇文章主要講解一下IOC底層實現(xiàn)的原理(反射),Bean容器的實現(xiàn),就不對IOC的概念進行詳述了。

在Spring的配置文件中,經(jīng)??吹饺缦屡渲茫?/p>

<bean id="courseDao" class="com.qcjy.learning.Dao.impl.CourseDaoImpl"></bean>

那么通過這樣配置,Spring是怎么幫我們實例化對象,并且放到容器中去了了?對,就是通過反射?。。?/p>

下面是Spring通過配置進行實例化對象

并放到容器中的偽代碼:

//解析<bean .../>元素的id屬性得到該字符串值為“courseDao”
String idStr = "courseDao";
//解析<bean .../>元素的class屬性得到該字符串值為“com.qcjy.learning.Dao.impl.CourseDaoImpl”
String classStr = "com.qcjy.learning.Dao.impl.CourseDaoImpl";
//利用反射知識,通過classStr獲取Class類對象
Class<?> cls = Class.forName(classStr);
//實例化對象
Object obj = cls.newInstance();
//container表示Spring容器
container.put(idStr, obj);

通過解析xml文件,獲取到id屬性和class屬性里面的內容,利用反射原理獲取到配置里面類的實例對象,存入到Spring的bean容器中。

當一個類里面需要應用另一類的對象時,

Spring的配置如下所示

<bean id="courseService" class="com.qcjy.learning.service.impl.CourseServiceImpl">
     <!-- 控制調用setCourseDao()方法,將容器中的courseDao bean作為傳入?yún)?shù) -->
     <property name="courseDao" ref="courseDao"></property>
</bean>

我們繼續(xù)用偽代碼的形式來模擬

實現(xiàn)一下Spring底層處理原理

//解析<property .../>元素的name屬性得到該字符串值為“courseDao”
String nameStr = "courseDao";
//解析<property .../>元素的ref屬性得到該字符串值為“courseDao”
String refStr = "courseDao";
//生成將要調用setter方法名
String setterName = "set" + nameStr.substring(0, 1).toUpperCase()
  + nameStr.substring(1);
//獲取spring容器中名為refStr的Bean,該Bean將會作為傳入?yún)?shù)
Object paramBean = container.get(refStr);
//獲取setter方法的Method類,此處的cls是剛才反射代碼得到的Class對象
Method setter = cls.getMethod(setterName, paramBean.getClass());
//調用invoke()方法,此處的obj是剛才反射代碼得到的Object對象
setter.invoke(obj, paramBean);

通過上面對Spring底層原理的分析,可以發(fā)現(xiàn),其實并不難,用到的都是反射機制,通過反射實例化對象,存入到Spring的bean容器中。

只要在代碼或配置文件中看到類的完整路徑(包.類),其底層原理基本上使用的就是Java的反射機制。

反射機制、反射機制的作用、反射機制的功能

1、反射機制的作用

  • 通過java語言中的反射機制可以i操作字節(jié)碼文件(讀和修改字節(jié)碼文件)
  • 通過反射機制可以操作代碼片段(class文件)

2、Java反射機制的功能

  • 在運行時判斷一個對象所屬的類
  • 在運行時構造一個類的對象
  • 在運行時判斷一個類所具有成員變量和方法
  • 在運行時調用一個對象的方法

3、反射機制相關的重要的類有哪些?

  • java.lang.Class : 代表整個字節(jié)碼,代表一個類型,代表整個類。
  • java.lang.reflect.Method : 代表字節(jié)碼中的方法字節(jié)碼,代表類中的方法。
  • java.lang.reflect.Contructor : 代表字節(jié)碼中的構造方法字節(jié)碼,代表類中的構造方法。
  • java.lang.reflect.Field : 代表字節(jié)碼中的屬性字節(jié)碼,代表類中的成員變量。

代碼如下(示例):

//java.lang.Class
public class User{
 //Field
 int no;
 
 //Constructor
 public User(){
 }
 
 public User(int no){
  this.no = no;
 }
 
 //Method
 public void setNo(int no){
  this.no = no;
 }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java Runnable線程傳參,實現(xiàn)讓run訪問參數(shù)

    Java Runnable線程傳參,實現(xiàn)讓run訪問參數(shù)

    這篇文章主要介紹了Java Runnable線程傳參,實現(xiàn)讓run訪問參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springcloud feign調其他微服務時參數(shù)是對象的問題

    springcloud feign調其他微服務時參數(shù)是對象的問題

    這篇文章主要介紹了springcloud feign調其他微服務時參數(shù)是對象的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù)

    java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù)

    這篇文章主要為大家詳細介紹了java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • HashMap插入相同key問題

    HashMap插入相同key問題

    這篇文章主要介紹了HashMap插入相同key問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java線程池實現(xiàn)帶返回值的方式方法

    Java線程池實現(xiàn)帶返回值的方式方法

    在Java中,線程池是一種重要的多線程處理方式,可以有效管理和重用線程,提高程序的性能和效率,有時候我們需要在多線程處理中獲取線程的返回值,本文將介紹如何使用線程池實現(xiàn)帶返回值的方式方法,需要的朋友可以參考下
    2024-09-09
  • java集合模擬實現(xiàn)斗地主洗牌和發(fā)牌

    java集合模擬實現(xiàn)斗地主洗牌和發(fā)牌

    這篇文章主要為大家詳細介紹了java集合模擬實現(xiàn)斗地主洗牌和發(fā)牌,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java模版引擎Freemarker

    Java模版引擎Freemarker

    FreeMarker是一個模板引擎,一個基于模板生成文本輸出的通用工具,使用純Java編寫 FreeMarker被設計用來生成HTML Web頁面,特別是基于MVC模式的應用程序
    2016-04-04
  • SpringBoot中使用redis做分布式鎖的方法

    SpringBoot中使用redis做分布式鎖的方法

    這篇文章主要介紹了SpringBoot中使用redis做分布式鎖的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot Admin健康檢查功能的實現(xiàn)

    SpringBoot Admin健康檢查功能的實現(xiàn)

    admin主要就是告訴運維人員,服務出現(xiàn)異常,然后進行通知(微信、郵件、短信、釘釘?shù)龋┛梢苑浅?焖偻ㄖ竭\維人員,相當報警功能,接下來通過本文給大家介紹SpringBoot Admin健康檢查的相關知識,一起看看吧
    2021-06-06
  • java字符串的合并

    java字符串的合并

    合并兩個字符串,如:str1 ="001,002,003,004,006",str2 = "001,002,005" 合并后應該是"001,002,003,004,005,006"。
    2008-10-10

最新評論