`

学习java中的反射(二)

 
阅读更多

      写这个主要是模仿一些 框架的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反射机制学习(二)"可能深入探讨了如何利用反射进行动态类型处理、访问私有成员以及创建对象等核心概念。在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...

    java例子 java反射

    在Java反射中,访问类的字段和方法也十分灵活。`getFields()`返回所有public字段,`getField()`获取指定名称的public字段。对于私有或其他访问修饰符的字段,可以使用`getDeclaredFields()`和`getDeclaredField()`。...

    Java反射机制的使用和学习方法

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。这一机制对于理解和实现高级框架、动态代理、元数据处理等场景至关重要。以下是对Java反射机制的详细说明:...

    Java反射学习.pdf

    Java 反射学习 Java 反射是 Java 程序设计语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说 "自审 ",并能直接操作程序的内部属性。Java 反射的能力在实际应用中非常有价值,例如,使用它能获得 ...

    Java中的反射机制

    Java反射机制允许运行中的程序检查自身,并能直接操作程序的内部属性。这是其他许多编程语言(如Pascal、C或C++)不具备的能力。 **1.1 Reflection的工作机制** 为了展示反射如何工作,我们来看一个简单的例子: ...

    java注解和反射的个人学习笔记

    java注解和反射的个人学习笔记

    java面试题--反射机制

    #### 二、Java反射机制简介 Java反射机制允许程序在运行时获取类的信息,这使得Java具有了一定程度上的动态性。具体来说,Java反射机制提供了以下功能: 1. **获取类的信息**:可以在运行时获取类的修饰符、父类、...

    Java反射机制的学习

    Java反射机制是Java编程语言中的一项核心特性,它允许程序在运行时动态地获取类的信息并进行操作。这使得Java能够在编译后仍然能够灵活地处理类和对象,增强了代码的动态性。在Android应用开发中,反射机制尤其重要...

    Java反射经典实例

    Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    java学习——java中的反射学习笔记.rar_java 反射

    Java反射是Java编程语言中的一种强大机制,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射是通过java.lang.Class类和java.lang.reflect包中的类来实现的。本篇笔记将深入探讨...

    java反射-英文版反射规范

    #### 二、Java反射的应用场景 Java反射广泛应用于框架开发、动态代理、测试工具等领域。例如,在Spring框架中,反射被用来动态创建对象和调用方法;在Hibernate等ORM框架中,反射用于处理数据库记录与Java对象之间...

    java中反射知识总结

    Java中的反射机制是Java语言一...通过学习和理解Java反射,开发者可以编写出更加灵活、可扩展的代码,解决一些常规编程方式无法处理的问题。但同时,也需要注意其带来的安全性和性能问题,合理地在项目中使用反射技术。

    java反射源代码

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有高度的灵活性,尤其在处理框架、插件系统以及元数据驱动...

    java中的反射reflect

    以下我们将深入探讨Java反射的基本概念、主要API以及如何通过给定的代码示例来理解反射的应用。 首先,让我们了解什么是类的反射。在Java中,`java.lang.Class` 类代表了运行时的类信息。我们可以通过一个类的全名...

    北大青鸟java反射机制

    在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念:在程序运行时,通过Class对象获取类的信息,包括类名、属性、方法等,并能够动态地创建对象和调用方法。...

    Java反射机制学习总结

    Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...

    java学习笔记(java 反射机制 流 内存管理)

    本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...

    Java反射简单例子

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制主要用到了java.lang.Class、java.lang.reflect.Method、java.lang.reflect....

Global site tag (gtag.js) - Google Analytics