反射獲取java對(duì)象的幾種方式
獲取Class對(duì)象
- 已知全限定名
Class clazz = Class.forName("java.util.ArrayList");
- 已知類
Class clazz = String.class;
- 已有對(duì)象
String str = "Hello"; Class clazz = str.getClass();
已有Class對(duì)象
//1.創(chuàng)建對(duì)象
Class clazz = MyClass.class; // 假設(shè) MyClass 是一個(gè)類
MyClass obj = (MyClass) clazz.newInstance(); // 創(chuàng)建 MyClass 的實(shí)例
//2.調(diào)用成員變量
Class clazz = MyClass.class;
Field field = clazz.getDeclaredField("fieldName"); // 獲取字段對(duì)象
field.setAccessible(true); // 設(shè)置可訪問(wèn)私有字段
Object value = field.get(obj); // 獲取字段值
field.set(obj, newValue); // 設(shè)置字段值
// 獲取字段值
Object value = field.get(obj);
System.out.println("原始值:" + value);
// 修改字段值
field.set(obj, newValue);
System.out.println("修改后:" + field.get(obj));
//3.調(diào)用方法
Class clazz = MyClass.class;
Method method = clazz.getDeclaredMethod("methodName", argTypes); // 獲取方法對(duì)象
method.setAccessible(true); // 設(shè)置可訪問(wèn)私有方法
Object result = method.invoke(obj, args); // 調(diào)用方法并獲取返回值
不同的構(gòu)造器創(chuàng)建對(duì)象
Class clazz = MyClass.class;
// 獲取無(wú)參構(gòu)造函數(shù),創(chuàng)建實(shí)例
MyClass obj1 = (MyClass) clazz.newInstance();
// 獲取有參構(gòu)造函數(shù),創(chuàng)建實(shí)例
Constructor constructor = clazz.getDeclaredConstructor(String.class, int.class);
MyClass obj2 = (MyClass) constructor.newInstance("name", 18);
spring獲取對(duì)象的方式
有以下類:
package com.xiaojiang.Spring;
public class Role {
private int id;
private String roleName;
private String note;
public Role(){}
public Role(int id,String roleName, String note)
{
super();
this.id = id;
this.roleName = roleName;
this.note = note;
} //setter,getter方法省略
}
<!--構(gòu)造器配置-->
<bean id="Role" class="com.xiaojiang.Spring.Role">
<constructor-arg value="1" type="int"></constructor-arg>
<constructor-arg value="小江" type="java.lang.String"></constructor-arg>
<constructor-arg value="有點(diǎn)丑" type="java.lang.String"></constructor-arg>
</bean><!--配置setter注入-->
<bean id="Role" class="com.xiaojiang.Spring.Role">
<property name="id" value="1"><property>
<property name="roleName" value="小江"><property>
<property name="note" value="測(cè)試"><property>
</bean> 基于接口的注入:對(duì)象賦值,將value的賦值改成ref賦值
到此這篇關(guān)于反射獲取java對(duì)象的幾種方式的文章就介紹到這了,更多相關(guān)反射獲取java對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java通過(guò)反射機(jī)制動(dòng)態(tài)設(shè)置對(duì)象屬性值的方法
- Java反射設(shè)置/獲取對(duì)象屬性值三種方式
- java基于反射得到對(duì)象屬性值的方法
- Java利用反射自動(dòng)封裝成實(shí)體對(duì)象的方法
- java使用反射給對(duì)象屬性賦值的兩種方法
- Java反射之類的實(shí)例對(duì)象的三種表示方式總結(jié)
- 詳解Java反射創(chuàng)建對(duì)象
- Java使用反射創(chuàng)建對(duì)象示例
- Java如何通過(guò)反射獲取對(duì)象的屬性和值
- 一文詳解Java中的反射與new創(chuàng)建對(duì)象
相關(guān)文章
使用mybatis的@Interceptor實(shí)現(xiàn)攔截sql的方法詳解
攔截器是一種基于 AOP(面向切面編程)的技術(shù),它可以在目標(biāo)對(duì)象的方法執(zhí)行前后插入自定義的邏輯,本文給大家介紹了使用mybatis的@Interceptor實(shí)現(xiàn)攔截sql的方法,需要的朋友可以參考下2024-03-03
詳解Spring Cloud Zuul 服務(wù)網(wǎng)關(guān)
本篇文章主要介紹了詳解Spring Cloud Zuul 服務(wù)網(wǎng)關(guān),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
解決反射調(diào)用方法時(shí)獲取bean失敗的問(wèn)題
文章描述了通過(guò)反射機(jī)制調(diào)用類方法時(shí)遇到的@Autowired注入失敗和事務(wù)回滾失敗的問(wèn)題,原因是反射生成的對(duì)象未被SpringIOC容器管理,解決方案是通過(guò)applicationContext.getBean("className")方法獲取Spring管理的bean來(lái)解決注入和事務(wù)問(wèn)題2025-10-10
SSM框架把日志信息保存到數(shù)據(jù)庫(kù)過(guò)程詳解
這篇文章主要介紹了SSM框架把日志信息保存到數(shù)據(jù)庫(kù)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解
這篇文章主要為大家介紹了JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
SpringBoot限制接口訪問(wèn)頻率功能實(shí)現(xiàn)
最近在基于SpringBoot做一個(gè)面向普通用戶的系統(tǒng),為了保證系統(tǒng)的穩(wěn)定性,防止被惡意攻擊,我想控制用戶訪問(wèn)每個(gè)接口的頻率,接下來(lái)通過(guò)本文給大家介紹SpringBoot限制接口訪問(wèn)頻率功能實(shí)現(xiàn),需要的朋友可以參考下2023-05-05

