欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談Java內(nèi)省

京東云 ? 來(lái)源:京東物流 王國(guó)泰 ? 作者:京東物流 王國(guó)泰 ? 2024-12-19 10:36 ? 次閱讀

作者:京東物流 王國(guó)泰

一、什么是內(nèi)省

講內(nèi)省,不得不說(shuō)Java Bean,Bean在Java中是一種特殊的類,主要用于裝載數(shù)據(jù),數(shù)據(jù)會(huì)被存儲(chǔ)在類的私有屬性中,通常具有無(wú)參構(gòu)造函數(shù)、可序列化、以及通過(guò)getter和setter方法來(lái)訪問(wèn)屬性。內(nèi)省是Java Beans規(guī)范的一部分,使用java.beans包中的類來(lái)實(shí)現(xiàn),最常用的類是Introspector。通過(guò)內(nèi)省,你可以獲取一個(gè)Java Bean的屬性描述符(PropertyDescriptor)和方法描述符(MethodDescriptor)

二、內(nèi)省常用API

1、相關(guān)類

2、Introspector

2.1 核心功能

用于獲取Bean的整體信息,包括屬性描述符、方法描述符和事件描述符等

2.2 核心方法

getBeanInfo

BeanInfo beanInfo = Introspector.getBeanInfo(Vehicle.class);

3、BeanInfo

3.1 核心功能

用于提供有關(guān)Bean的元數(shù)據(jù),通常用于描述Bean的屬性、事件和方法

3.2 核心方法

getPropertyDescriptors

PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

getMethodDescriptors

MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors();

getEventSetDescriptors

EventSetDescriptor[] eventSetDescriptors = beanInfo.getEventSetDescriptors();

4、PropertyDescriptor

4.1 核心功能

用于描述Bean的屬性,提供了對(duì)屬性的詳細(xì)描述,包括屬性的名稱、類型、讀方法getter、寫方法setter等

4.2 核心方法

getName

PropertyDescriptor namePD = new PropertyDescriptor("name", Vehicle.class);
String name = namePD.getName();

getReadMethod

PropertyDescriptor namePD = new PropertyDescriptor("name", Vehicle.class);
Method getter = namePD.getReadMethod();

String methodName = getter.getName();
String vehicleName = (String) getter.invoke(new Vehicle());

getWriteMethod

PropertyDescriptor namePD = new PropertyDescriptor("name", Vehicle.class);
Method setter = namePD.getWriteMethod();

String methodName = setter.getName();
setter.invoke(new Vehicle(), "JD0001");

5、MethodDescriptor

5.1 核心功能

用于描述一個(gè)方法的屬性,提供了對(duì)方法的詳細(xì)描述,包括方法的名稱、參數(shù)類型、返回類型等

5.2 核心方法

getName

MethodDescriptor methodDescriptor = new MethodDescriptor(Vehicle.class.getMethod("setName", String.class));
String name = methodDescriptor.getName();

getMethod

MethodDescriptor methodDescriptor = new MethodDescriptor(Vehicle.class.getMethod("setName", String.class));
Method method = methodDescriptor.getMethod();
method.invoke(new Vehicle(), "JD0001");

6、EventSetDescriptor

6.1 核心功能

用于描述一個(gè)Bean能夠觸發(fā)的一組事件,提供了有關(guān)事件監(jiān)聽(tīng)器類型、添加和移除監(jiān)聽(tīng)器的方法以及事件通知方法的信息

6.2 核心方法

不常用

三、內(nèi)省常見(jiàn)使用場(chǎng)景

1、依賴注入

Spring使用內(nèi)省來(lái)分析類的構(gòu)造函數(shù)、字段和方法,并自動(dòng)注入依賴對(duì)象,可參考BeanWrapperImpl,部分源碼如下:

@Override
public PropertyDescriptor[] getPropertyDescriptors() {
  return getCachedIntrospectionResults().getPropertyDescriptors();
}

2、對(duì)象拷貝

Spring BeanUtils使用內(nèi)省來(lái)復(fù)制對(duì)象的屬性,可參考BeanUtils,部分源碼如下:

public static PropertyDescriptor[] getPropertyDescriptors(Class clazz) throws BeansException {
  return CachedIntrospectionResults.forClass(clazz).getPropertyDescriptors();
}

3、開(kāi)發(fā)工具和IDE

開(kāi)發(fā)工具和集成開(kāi)發(fā)環(huán)境(IDE,如IntelliJ IDEA)使用內(nèi)省來(lái)提供代碼補(bǔ)全、重構(gòu)、調(diào)試等功能

四、內(nèi)省優(yōu)缺點(diǎn)

1、優(yōu)點(diǎn)

靈活性和可擴(kuò)展性:允許在運(yùn)行時(shí)動(dòng)態(tài)地獲取和操作對(duì)象的屬性和方法

簡(jiǎn)化開(kāi)發(fā)工作:支持框架和工具的開(kāi)發(fā),能夠自動(dòng)處理對(duì)象的屬性和方法

2、缺點(diǎn)

性能開(kāi)銷:比直接調(diào)用方法或訪問(wèn)字段要慢,而且不當(dāng)使用可能會(huì)導(dǎo)致內(nèi)存泄漏或增加GC壓力

訪問(wèn)安全:繞過(guò)Java的訪問(wèn)控制機(jī)制,訪問(wèn)私有字段和方法,可能會(huì)帶來(lái)安全隱患,特別是在處理敏感數(shù)據(jù)時(shí)

類型安全:通常是基于字符串名稱進(jìn)行的(如方法名、屬性名),在編譯時(shí)無(wú)法檢查其正確性,容易導(dǎo)致運(yùn)行時(shí)錯(cuò)誤

可讀性和可維護(hù)性:代碼可讀性差,增加調(diào)試難度

五、內(nèi)省與反射的區(qū)別

1、用途

內(nèi)省主要用于Java Bean的屬性操作,適合于標(biāo)準(zhǔn)化的Bean操作

反射則是更通用的機(jī)制,可以操作類的所有成員,包括私有成員

2、實(shí)現(xiàn)

內(nèi)省是基于Java Beans規(guī)范的,使用java.beans包

反射是Java語(yǔ)言的核心特性,使用java.lang.reflect包

3、性能

內(nèi)省通常比反射快,主要原因是內(nèi)省使用了緩存機(jī)制,減少了權(quán)限檢查,并且在設(shè)計(jì)上針對(duì)特定場(chǎng)景進(jìn)行了優(yōu)化

相關(guān)文獻(xiàn)

JavaBeans API Specification:https://docs.oracle.com/javase/8/docs/api/java/beans/package-summary.html

《Java編程思想》(Thinking in Java) - Bruce Eckel

《Java核心技術(shù) 卷 I》(Core Java Volume I) - Cay S. Horstmann, Gary Cornell

《Java反射機(jī)制詳解》(Java Reflection in Action) - Ira R. Forman, Nate Forman


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2974

    瀏覽量

    105094
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Java基礎(chǔ)知識(shí):內(nèi)省#Java

    JAVA
    學(xué)習(xí)硬聲知識(shí)
    發(fā)布于 :2022年11月16日 17:54:46

    PCB經(jīng)驗(yàn)淺談

    PCB經(jīng)驗(yàn)淺談
    發(fā)表于 08-04 09:33

    手機(jī)硬件知識(shí)淺談

    手機(jī)硬件知識(shí)淺談
    發(fā)表于 05-15 11:04

    手機(jī)機(jī)構(gòu)設(shè)計(jì)淺談

    手機(jī)機(jī)構(gòu)設(shè)計(jì)淺談
    發(fā)表于 11-13 11:21

    淺談射頻PCB設(shè)計(jì)

    淺談射頻PCB設(shè)計(jì)
    發(fā)表于 03-20 15:07

    Java SE、Java EE、Java ME之間的區(qū)別

    本文把JAVA SE、JAVA EE、JAVA ME拿來(lái)做下區(qū)別,同時(shí)也分享一下作者的一些成果。目前的Java平臺(tái)根據(jù)軟件開(kāi)發(fā)人員、服務(wù)提供商和設(shè)備生產(chǎn)商可以針對(duì)特定的市場(chǎng)可以分為三個(gè)
    發(fā)表于 07-11 08:31

    淺談Java虛擬機(jī)的研究與移植

    Kaffe移植的關(guān)鍵技術(shù)及方案基于ST20嵌入式系統(tǒng)的Java虛擬機(jī)研究與移植
    發(fā)表于 04-25 09:49

    Java的類

    1.1 有關(guān)面向?qū)ο蟮母拍?.2 Java語(yǔ)言的特點(diǎn)1.3 Java的開(kāi)發(fā)環(huán)境1.4  第一個(gè)Java程序1.5 Java類型系統(tǒng)1.6
    發(fā)表于 04-28 14:23 ?0次下載

    java是什么?java概念解釋

    電子發(fā)燒友網(wǎng)站提供《java是什么?java概念解釋.pdf》資料免費(fèi)下載
    發(fā)表于 04-17 21:35 ?0次下載

    JAVA教程之Java畫圖程序

    JAVA教程之Java畫圖程序,很好的JAVA的資料,快來(lái)學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?13次下載

    解析c++語(yǔ)言的Qt內(nèi)省機(jī)制

    所謂 內(nèi)省 是指面向?qū)ο笳Z(yǔ)言的一種在運(yùn)行期間查詢對(duì)象信息的能力, 比如如果該語(yǔ)具有運(yùn)行期間檢查對(duì)象型別的能力,那么我們稱它是型別 內(nèi)省 (type intropection)的,型別 內(nèi)省 可以用
    發(fā)表于 12-15 10:22 ?1507次閱讀

    虛擬機(jī)內(nèi)省與內(nèi)存安全監(jiān)測(cè)

    針對(duì)在傳統(tǒng)特權(quán)虛擬機(jī)中利用虛擬機(jī)內(nèi)省實(shí)時(shí)監(jiān)測(cè)其他虛擬機(jī)內(nèi)存安全的方法不利于安全模塊與系統(tǒng)其他部分的隔離,且會(huì)拖慢虛擬平臺(tái)的整體性能的問(wèn)題,提出基于輕量操作系統(tǒng)實(shí)現(xiàn)虛擬機(jī)內(nèi)省的安全架構(gòu),并提出基于內(nèi)存
    發(fā)表于 01-08 14:15 ?0次下載
    虛擬機(jī)<b class='flag-5'>內(nèi)省</b>與內(nèi)存安全監(jiān)測(cè)

    淺談Java編程學(xué)習(xí) Java基礎(chǔ)語(yǔ)法注意項(xiàng)

    每當(dāng)說(shuō)到IT行業(yè)時(shí),很多朋友們會(huì)想到java,隨著時(shí)代的發(fā)展,人們學(xué)習(xí)java的熱度依然只增不減,但關(guān)于java,有人會(huì)問(wèn)基礎(chǔ)語(yǔ)法是怎樣的,該如何學(xué)習(xí)?
    發(fā)表于 05-30 16:34 ?1035次閱讀

    Java程序設(shè)計(jì)教程之Java語(yǔ)言的基礎(chǔ)知識(shí)概述

    本文檔詳細(xì)介紹的是Java程序設(shè)計(jì)教程之Java語(yǔ)言的基礎(chǔ)知識(shí)概述主要內(nèi)容包括了:1.Java語(yǔ)言發(fā)展簡(jiǎn)史,2.Java的特點(diǎn)(為什么要學(xué)習(xí)java
    發(fā)表于 02-22 10:28 ?36次下載
    <b class='flag-5'>Java</b>程序設(shè)計(jì)教程之<b class='flag-5'>Java</b>語(yǔ)言的基礎(chǔ)知識(shí)概述

    華納云:java web和java有什么區(qū)別java web和java有什么區(qū)別

    Java Web和Java是兩個(gè)不同的概念,它們?cè)诠δ?、用途和?shí)現(xiàn)方式上存在一些區(qū)別,下面將詳細(xì)介紹它們之間的區(qū)別。 1. 功能和用途: – Java是一種編程語(yǔ)言,它提供了一種用于開(kāi)發(fā)各種應(yīng)用程序
    的頭像 發(fā)表于 07-16 13:35 ?891次閱讀
    華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別