写这个主要是模仿一些 框架的javabean的注入功能,仅为自己学习使用
首先定义一个javabean
package com.model;
public class Person {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
然后就写个测试的类对该类进行注入
package com.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import com.model.Person;
public class TestRef {
static Class p;
public static void main(String[] args) throws InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
try {
p=Class.forName("com.model.Person");
/**
* 在实际开发中获取p的class有多种方法
* 这里在实际开发中可以抽象出一个方法用来或去Person.class这样的参数类型也就是Class类型的
* p=Person.class;
*
*/
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("类不存在");
}
//pp=Person.class.newInstance
Person pp=(Person) p.newInstance();
/**
* getDeclaredMethods 只获得在当前类中声明的方法,能获得私有的方法,
* 必须把setAccessible(true)加上,这样才能正确访问private和protected方法 ;
* getMethods 获得包括继承的所有方法,只能获得公有的方法
*/
Method[] me=p.getDeclaredMethods();
for (Method method : me) {
System.out.print("方法名称:"+method.getName()+" 所在类:"+method.getDeclaringClass());
String mname=method.getName();
//为方法赋值,javabean中对方法进行设置都是以set开头
if(mname.startsWith("set"))
{
/**
* 由于一般来说javabean或者说pojo中以set开始的方法中只有一个参数
*/
Class<?>[] c=method.getParameterTypes();
/**
* name---对应的方法为setName
* 要获得字段的名称,就要把N改为小写
* Character.toLowerCase(mname.charAt(3))
*/
String prop = Character.toLowerCase(mname.charAt(3)) + mname.substring(4);
System.out.println("参数名称 "+prop);
//进行set的方法里面只有一个参数,进行判断当为一个参数的时候进行设置
if(c.length==1)
{
String type=c[0].getName();//获得参数类型
//进行赋值,我这里就把数据固定整形为1,字符型为xiaofei
//在实际开发中我们要把通过request.getParameter("xxx")得到的值根据参数相应的类型进行转换
if(type=="java.lang.String")
{
//如这里为字符类型String.valueOf("param's name");
method.invoke(pp, new Object[]{"xiaofei"});
}
if(type=="int")
{
method.invoke(pp, new Object[]{1});
}
}
System.out.println("toGenericString: "+method.toGenericString());
Type [] ts=method.getGenericParameterTypes();
for (Type type : ts) {
System.out.println("type: "+type);
}
}
System.out.println("");
}
Field[] fields=p.getDeclaredFields();
for (Field f : fields) {
System.out.println(f.getName()+"---"+f.getType().getName());
f.setAccessible(true);
}
//通过反射之后看赋值是否成功
System.out.println("name:"+pp.getName()+" age:"+pp.getAge()+" id: "+pp.getId());
}
}
分享到:
相关推荐
这篇博文"Java反射机制学习(二)"可能深入探讨了如何利用反射进行动态类型处理、访问私有成员以及创建对象等核心概念。在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...
在Java反射中,访问类的字段和方法也十分灵活。`getFields()`返回所有public字段,`getField()`获取指定名称的public字段。对于私有或其他访问修饰符的字段,可以使用`getDeclaredFields()`和`getDeclaredField()`。...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。这一机制对于理解和实现高级框架、动态代理、元数据处理等场景至关重要。以下是对Java反射机制的详细说明:...
Java 反射学习 Java 反射是 Java 程序设计语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说 "自审 ",并能直接操作程序的内部属性。Java 反射的能力在实际应用中非常有价值,例如,使用它能获得 ...
Java反射机制允许运行中的程序检查自身,并能直接操作程序的内部属性。这是其他许多编程语言(如Pascal、C或C++)不具备的能力。 **1.1 Reflection的工作机制** 为了展示反射如何工作,我们来看一个简单的例子: ...
java注解和反射的个人学习笔记
#### 二、Java反射机制简介 Java反射机制允许程序在运行时获取类的信息,这使得Java具有了一定程度上的动态性。具体来说,Java反射机制提供了以下功能: 1. **获取类的信息**:可以在运行时获取类的修饰符、父类、...
Java反射机制是Java编程语言中的一项核心特性,它允许程序在运行时动态地获取类的信息并进行操作。这使得Java能够在编译后仍然能够灵活地处理类和对象,增强了代码的动态性。在Android应用开发中,反射机制尤其重要...
Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
Java反射是Java编程语言中的一种强大机制,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射是通过java.lang.Class类和java.lang.reflect包中的类来实现的。本篇笔记将深入探讨...
#### 二、Java反射的应用场景 Java反射广泛应用于框架开发、动态代理、测试工具等领域。例如,在Spring框架中,反射被用来动态创建对象和调用方法;在Hibernate等ORM框架中,反射用于处理数据库记录与Java对象之间...
Java中的反射机制是Java语言一...通过学习和理解Java反射,开发者可以编写出更加灵活、可扩展的代码,解决一些常规编程方式无法处理的问题。但同时,也需要注意其带来的安全性和性能问题,合理地在项目中使用反射技术。
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有高度的灵活性,尤其在处理框架、插件系统以及元数据驱动...
以下我们将深入探讨Java反射的基本概念、主要API以及如何通过给定的代码示例来理解反射的应用。 首先,让我们了解什么是类的反射。在Java中,`java.lang.Class` 类代表了运行时的类信息。我们可以通过一个类的全名...
在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念:在程序运行时,通过Class对象获取类的信息,包括类名、属性、方法等,并能够动态地创建对象和调用方法。...
Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...
本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制主要用到了java.lang.Class、java.lang.reflect.Method、java.lang.reflect....