java反射和注解原理 Java中的注解到底是如何工作的?
Java中的注解到底是如何工作的?注解是用來(lái)描述Java類的,可以自定義注解,然后通過(guò)反射獲取注解執(zhí)行指定的動(dòng)作。舉個(gè)簡(jiǎn)單的例子這樣就可以通過(guò)反射來(lái)獲取到一些元信息了,相當(dāng)于配置和業(yè)務(wù)邏輯實(shí)現(xiàn)了分離。
Java中的注解到底是如何工作的?
注解是用來(lái)描述Java類的,可以自定義注解,然后通過(guò)反射獲取注解執(zhí)行指定的動(dòng)作。
舉個(gè)簡(jiǎn)單的例子
這樣就可以通過(guò)反射來(lái)獲取到一些元信息了,相當(dāng)于配置和業(yè)務(wù)邏輯實(shí)現(xiàn)了分離。
當(dāng)然這個(gè)自定義注解還需要依賴一些特定的注解,我們稱為元注解。一共有5種:
@Retention:存活的周期
RetentionPolicy.SOURCE
保留在源碼階段RetentionPolicy.CLASS
編譯RetentionPolicy,RUNTIME 運(yùn)行階段
@Documented 將注解中的元素包含到JavaDoc中
@Target 注解可以用到的地方 有類、方法、屬性等
@Inherited 繼承
@Repeatable 可重復(fù)
java的反射到底是有什么用處?怎么用?
Java反射說(shuō)的是在運(yùn)行狀態(tài)中,對(duì)于任何一個(gè)類,我們都能夠知道這個(gè)類有哪些方法和屬性。對(duì)于任何一個(gè)對(duì)象,我們都能夠?qū)λ姆椒ê蛯傩赃M(jìn)行調(diào)用。我們把這種動(dòng)態(tài)獲取對(duì)象信息和調(diào)用對(duì)象方法的功能稱之為反射機(jī)制。
可以不通過(guò)new關(guān)鍵字獲取對(duì)象并且使用類對(duì)象中的成員變量,方法,修飾符等等,在這里舉例獲取類。
第一種:使用Class.forName(String classPath) ClassPath:寫需要反射的類名,一般是以包名.類名。如:Class clazz = Class.forName("com.entity.Example")
第二種:直接使用Class clz = 類名.class
這種情況一般在我們知道有這個(gè)類的時(shí)候去使用。如:Class clz = Example.class
第三種:Class clz = 對(duì)象. getClass()
前提是對(duì)象已經(jīng)被實(shí)例化出來(lái)了 。如:
Example ex = new Example()
Class clz = ex.getClass()
這三種方法都有各自的優(yōu)點(diǎn),一般我們使用第一種比較多,按照自己的實(shí)際需求去使用才是最好的。反射有啥用?有啥應(yīng)用場(chǎng)景?
1.spring框架的ioc是基于java的反射機(jī)制。
2.JDBC 的數(shù)據(jù)庫(kù)的連接注冊(cè)驅(qū)動(dòng),獲取連接也是基于Java反射。
3.Hibernate,Mybatis都有運(yùn)用到反射。
從事Java后端開(kāi)發(fā),要學(xué)習(xí)哪些知識(shí)和技能?
你好,我是一名后端猿,做java的話,要熟悉常用的java api,并發(fā)包,框架目前要求最多的是springboot,微服務(wù)框架spring could,數(shù)據(jù)庫(kù)基本功學(xué)扎實(shí),最好懂些前端,基本上的工作就都能處理,希望能幫助你解惑,美少女鎮(zhèn)樓[機(jī)智][機(jī)智][機(jī)智]