-
2021-02-27 10:55:26
AOP:Aspect Oriented Programming,意为面向切面/局部的程序设计。它是面向对象的程序设计的一种延伸。 本文试图通过使用Java本身的动态属性,来实现一个具有简单的AOP功能的容器。 开始理解起来可能比较费劲,但我们可以通过一个通俗说明来这样理解AOP
JAVA反射——给属性赋值使用反射的机制来给私有的属性赋值,这个原理在许多ORM的组件中都有应用,下面是一段掩饰代码public class FieldTest {public static void main(String[] args) throws Exception {Class clazz = Class.forName("com.snowdi.reflection.Student");Object obj = clazz.newInstance();//通过反射创建对象// 调用getDeclaredField("name") 取得name属性对应的Field对象Field f = clazz.getDec最近做项目,需要利用java反射机制,获取实体类自定义注解的说明信息 1.自定义注解 package com.bjhy.platform.criminal.search.core.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.langlaredField("name");// 取消属性的访问权限控制,即使private属性也可以进行访问。f.setAccessible(true);// 调用get()方法取得对应属性值。System.out.println(f.get(obj));
//相当于obj.getName();// 调用set()方法给对应属性赋值。f.set(obj, "lkl");
//相当于obj.setName("lkl");// 调用get()方法取得对应属性修改后的值。System.out.println(f.get(obj));}}本文链接:http://www.snowdi.com/1404.html
更多相关内容 -
Java 使用反射给属性赋值
2022-04-25 18:10:11Java 使用反射给属性赋值 package com.nf147.manage.spring; import java.lang.reflect.Field; public class Cat { private String name; @Override public String toString() { return "Cat{" + "name=...Java 使用反射给属性赋值
package com.nf147.manage.spring; import java.lang.reflect.Field; public class Cat { private String name; @Override public String toString() { return "Cat{" + "name='" + name + '\'' + '}'; } public String setname() { return name; } public static void main(String[] args) throws Exception { //第一种方式 Cat cat = new Cat(); Field name = cat.getClass().getDeclaredField("name"); name.setAccessible(true); name.set(cat, "波斯猫"); System.out.println(cat.name); //第二种方式 Cat cat1 = Cat.class.newInstance(); cat1.name = "中华田园猫"; System.out.println(cat1.name); } }
结果如图:
www.cnblogs.com/nongzihong/p/10120104.html
-
java-使用反射给属性赋值(适用于多对象共用一个处理参数的方法)
2021-11-28 21:09:55反射给属性赋值整体的三个测试代码块。我的需求是想一个方法可以根据传入对象的不同,进行公共的操作。
这个例子创建了一个 User 对象,有两个属性,分别是id和name。需要给这两个属性进行赋值操作。
而操作的方法则是公共的方法,不但是可以为这个对象操作,其他的对象只要有这两个属性也可以实现操作。
我之前一直不明白这个类型怎么去做控制,因为传入的对象是不同的。其实最核心的点是两个,一个是类类型的控制,第二个是反射赋值。
第一个类型控制(三种情况):
1.传入空对象,这个时候可以用 class<T> 去接,进行实例化并返回
2.传入已经定义好的对象,这个时候可以用他们的公共基类 Obejct 去接。
3.返回对象(我之前最迷的一点),可以用 <T> T 形式,表示返回的对象是一个泛型。可以方法处理完后再做转换处理。
第二个反射注入(两种):
1. 使用大家都耳熟能详的set方法注入,需要拿到方法参数
2. 拿到字段值直接使用反射工具里的set方法注入。
见详细的代码:
import lombok.Data; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 反射注入属性值 * @author wangdefa */ public class SetValue { //创建一个User对象 @Data static class User { private String id; private String name; } /** * 主方法用于调用测试,查看运行结果 * @param args * @throws IllegalAccessException * @throws InstantiationException * @throws NoSuchMethodException * @throws InvocationTargetException */ public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { User user = (User) setVal(User.class); System.out.println(user.toString()); user = setMethodVal(User.class); System.out.println(user.toString()); setMethodValVoid(user); System.out.println(user.toString()); } /** * 反射注入值-通过属性字段进行赋值 * * @param tClass * @return * @throws IllegalAccessException * @throws InstantiationException */ private static Object setVal(Class<User> tClass) throws IllegalAccessException, InstantiationException { Object obj = tClass.newInstance(); //getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。 //getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。 Field[] fields = obj.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { //成员变量为private,故必须进行此操作 //以通过反射获取私有变量的值,在访问时会忽略访问修饰符的检查 fields[i].setAccessible(true); if (fields[i].getName().equals("id")) { fields[i].set(obj,"1"); } else if (fields[i].getName().equals("name")){ fields[i].set(obj,"名字"); } } return obj; } /** * 反射注入值-通过属 set方法进行赋值 * * <T> T 表示返回值是一个泛型 * T 用于限制传递的数据类型(编译时才需要去确定的具体类型) * @param tClass * @return * @throws IllegalAccessException * @throws InstantiationException */ private static <T> T setMethodVal(Class<T> tClass) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { T obj = tClass.newInstance(); Method setId = obj.getClass().getMethod("setId", String.class); setId.invoke(obj, "2"); Method setName = obj.getClass().getMethod("setName", String.class); setName.invoke(obj, "名称"); return obj; } /** * 不同对象使用同一个方法操作相同的字段值(无参) * @param obj * @throws IllegalAccessException * @throws NoSuchMethodException * @throws InvocationTargetException */ private static void setMethodValVoid(Object obj) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException { Method setId = obj.getClass().getMethod("setId", String.class); setId.invoke(obj, "3"); Method setName = obj.getClass().getMethod("setName", String.class); setName.invoke(obj, "3名称"); } }
-
Java 通过反射给实体类赋值操作
2020-08-24 20:17:12主要介绍了Java 通过反射给实体类赋值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
关于java反射给属性进行赋值的问题!
2021-02-26 15:45:18代码如下:packagecom.itcast....importjava.io.FileDescriptor;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.Metho...代码如下:package com.itcast.examQues...代码如下:packagecom.itcast.examQuestions.two;importjava.io.FileDescriptor;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.Metho...
代码如下:
package com.itcast.examQuestions.two;
import java.io.FileDescriptor;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Person {
String name = "小红";
int age = 22 ;
public static void main(String[] agr)throws Exception{
Constructor constructor1 = Person.class.getConstructor(String.class,int.class);
Objectper1 = constructor1.newInstance("小明",2);
//System.out.println(name);
Method methodsn = Person.class.getMethod("setName", String.class);
methodsn.invoke(per1, "小黑");
//System.out.println(name);
ChangeStringVlue(per1);
System.out.println(per1);
}
public static void ChangeStringVlue(Object per1)throws Exception{
Field[] fields = per1.getClass().getFields();
for(Field field:fields)
{
if(field.getType() == String.class){
String oldvalue = (String)field.get(per1);
String newvalue = oldvalue.replaceAll("小红", "小白");
field.set(per1,newvalue);
}
}
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString(){
return name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
以上代码为什么不能给 name属性进行赋值?哪错了? 谢谢您的回答!我都研究好久了。
展开
-
Java使用反射向属性赋值
2021-12-31 15:33:25将属性字段中包含”user“的(不区分大小写),全部赋值为”测试“ /** * @param obj: Java对象 * @param fieldName: 属性名称 * @param filedValue: 属性值 */ private static void reflectionUserInfo... -
Java 反射对类的成员属性进行赋值
2021-06-30 11:35:27//赋值 } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } System.err.println(entity.jsonData()); 类成员的字段属性需要有get/set方法; ... -
通过java反射给对象赋值
2022-05-19 11:22:51由于字段太多,不愿通过if else的方式判断来赋值。遂想到通过反射的方式来实现功能 入参demo如下: "data": [ { "column": "age", "result": "20", }, { "column": "height", "result": "18 -
java反射机制动态给属性赋值
2021-04-17 09:19:21利用java的reflection机制,动态的给类中的变量赋值。try { Class cls = Class.forName("com.zhjx.bean.User"); Method mtd = cls.getMethod("setUsername", new Class[]{String.class}); Object obj = (Object)cls.... -
JAVA反射之私有属性赋值
2019-10-12 09:09:34案例:Map集合若有key(键)与User类中的私有属性相同,就把对应的value值赋值给该私有属性。 User类: public class User { private int id; private String name; private String sex; private String ... -
java反射遍历实体类属性和类型,并赋值和获取值的简单方法
2020-08-30 20:27:38下面小编就为大家带来一篇java反射遍历实体类属性和类型,并赋值和获取值的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
【java反射之动态属性赋值】
2021-03-22 08:30:13JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制... -
java反射给指定字段赋值
2011-10-20 13:25:14反射给指定字段赋值 -
java 利用反射机制,获取实体所有属性和方法,并对属性赋值
2020-08-31 15:08:08主要介绍了 java 利用反射机制,获取实体所有属性和方法,并对属性赋值的相关资料,需要的朋友可以参考下 -
java使用反射给对象属性赋值的两种方法
2018-11-29 14:20:07java反射无所不能,辣么,怎么通过反射设置一个属性的值呢? 主程序: /** * @author tengqingya * @create 2017-03-05 15:54 */ public class TestReflectSet { private String readOnly; public ... -
Java反射详解
2021-03-17 18:20:53反射(Reflection)能够让运行于 JVM 中的程序检测和修改运行时的行为。Class类提供了以下方法四个public方法,用于获取某个类的构造方法:Constructor getConstructor(Class[] params)// 根据构造函数的参数,返回一... -
Java反射给对象赋值(通用方法)
2021-04-02 17:14:03* 返回值:返回User对象,你将获得一个id属性为"001"的User对象 */ public static <T> T mapToPOJO(Map map, Class clazz) throws Exception { //通过class对象拿到所有的字段(包括私有) Fi. -
JAVA反射实现一个对象的属性值赋值给另一个对象的属性
2021-02-28 13:36:36public class BaseUtil { /** * 将一个集合中对象的值拷贝到另一个对象,属性相同即赋值 * @param source 源数据,将此对象数据取出 * @param tClass 目标对象,将取出的数据赋值到该对象中 * @param 源数据类型 * ... -
JavaScript 反射和属性赋值实例解析
2021-01-19 20:45:12这篇文章主要介绍了JavaScript 反射和属性赋值实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java和.NET都有着比较完善的反射机制,用来处理未知的... -
Java使用注解加反射赋值属性
2021-09-14 19:59:28使用反射读取注解并给属性赋值命名规范问题 登录消息中有很多开关属性,这些属性在赋值的时候会大段执行结构相同的代码,为了减少代码量和通用性使用反射合并这些类似的代码。 1. 原始代码 灰色部分都是在设置开关... -
Java反射机制之反射构建对象以及给属性赋值
2019-08-01 20:06:20总结一下今天所学,我们在学习java的时候,总会多多少少的听到过反射机制,但是我们好像听过之后就过去了,从来没去了解过它,然后平时做东西,也没有用到过。久而久之就慢慢给淡忘了。有时候面试的时候会被问道,你... -
java反射机制给实体类相同字段自动赋值实例
2020-08-24 20:16:51主要介绍了java反射机制给实体类相同字段自动赋值实例,具有 -
Java通过反射机制动态设置对象属性值的方法
2020-09-01 23:39:05下面小编就为大家带来一篇Java通过反射机制动态设置对象属性值的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
java通过反射遍历对象得到属性\反射赋值
2021-04-17 07:30:36import lombok.Data;import java.lang.reflect.Field;import java.lang.reflect.Method;@Datapublic class MyFK {String name.../*** 通过反射遍历对象得到对象的值* @param myFK* @throws Exception*/public void t... -
java高级-反射给类的属性赋值,主要用于繁琐的getter和setter方法
2021-02-12 15:29:44一、讨论传统属性赋值和反射机制赋值1.1传统赋值的弊端当一个类的属性非常多的时候,采用传统赋值方式的话,就会调用大量的setter方法,会存在大量的重复操作。1.2属性内容的自动设置思路 1.3定义beanUtils工具类 ... -
java初级:通过反射对象,给私有属性赋值和取值,方法的赋值和取值
2021-12-01 15:17:28} } //反射对象获取属性 public class Test1 { public static void main(String[] args) throws Exception, SecurityException { Class clazz = Student.class; Field field = clazz.getDeclaredField(...