`

Java基础五:内省(对JavaBean的操作)

阅读更多
/**
 * Person JavaBean
 * 
 * JavaBean的要求:有get,set方法,JavaBean的属性值是根据get,set方法后面的内容来确定的。
 * 
 * @author 张明学
 * 
 */
public class PersonBean {
	private String name;
	private int age;
	private Date birthday = new Date();
	private String x;
	public PersonBean() {
	}
	public PersonBean(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public String getP() {
		return x;
	}
	public void setP(String p) {
		this.x = p;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 注意上面的x属性和getP及setP方法

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

/**
 * 内省(对JavaBean的操作)
 * 
 * @author 张明学
 * 
 */
public class IntroSpectorStudy {

	public static void main(String[] args) throws Exception {
		PersonBean pb = new PersonBean("java", 23);
		pb.setP("p属性");
		// 定义几个属性名称
		String propertyP = "p";
		String propertyName = "name";
		String propertyAge = "age";

		// **************PropertyDescriptor的使用**************\\
		// 使用内省
		Object returnValue = null;
		// 获取age属性
		returnValue = getProperty(pb, propertyAge);
		System.out.println(returnValue);
		// 获取p属性(在PersonBean中只有getP,setP方法,没有P变量,getP,setP操作的是x变量,它的JavaBan属性名是p)
		returnValue = getProperty(pb, propertyP);
		System.out.println(returnValue);

		String newValue = "C++";
		// 设置name属性
		setProperty(pb, propertyName, newValue);
		System.out.println(pb.getName());

		// **************BeanInfo的使用**************\\
		// 其它办法:
		BeanInfo beanInfo = Introspector.getBeanInfo(PersonBean.class);
		// PersonBean所有的属性
		PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
		for (int i = 0; i < pds.length; i++) {
			System.out.println("--------属性名:" + pds[i].getName() + "--------");
			System.out.println("属性类型:" + pds[i].getPropertyType());
			System.out.println("get方法:" + pds[i].getReadMethod());
			System.out.println("set方法:" + pds[i].getWriteMethod());
		}

	}

	/**
	 * 获取JavaBean的属性值
	 * 
	 * @param bean
	 *            JavaBean对象
	 * @param propertyName
	 *            属性名称
	 * @return 该JavaBean对象的属性值
	 * @throws Exception
	 */
	private static Object getProperty(PersonBean bean, String propertyName)
			throws Exception {
		Object returnValue = null;
		PropertyDescriptor pd = new PropertyDescriptor(propertyName,
				PersonBean.class);
		Method methodGetAge = pd.getReadMethod();
		returnValue = methodGetAge.invoke(bean, null);
		return returnValue;
	}

	/**
	 * 设置JavaBean的属性值
	 * 
	 * @param bean
	 *            JavaBean对象
	 * @param propertyName
	 *            属性名
	 * @param propertyValue
	 *            设置的属性值
	 * @throws Exception
	 */
	private static void setProperty(PersonBean bean, String propertyName,
			String propertyValue) throws Exception {
		PropertyDescriptor pd;
		pd = new PropertyDescriptor(propertyName, PersonBean.class);
		Method methodSet = pd.getWriteMethod();
		methodSet.invoke(bean, propertyValue);
	}
}

 

23
p属性
C++
--------属性名:age--------
属性类型:int
get方法:public int com.mengya.PersonBean.getAge()
set方法:public void com.mengya.PersonBean.setAge(int)
--------属性名:birthday--------
属性类型:class java.util.Date
get方法:public java.util.Date com.mengya.PersonBean.getBirthday()
set方法:public void com.mengya.PersonBean.setBirthday(java.util.Date)
--------属性名:class--------
属性类型:class java.lang.Class
get方法:public final native java.lang.Class java.lang.Object.getClass()
set方法:null
--------属性名:name--------
属性类型:class java.lang.String
get方法:public java.lang.String com.mengya.PersonBean.getName()
set方法:public void com.mengya.PersonBean.setName(java.lang.String)
--------属性名:p--------
属性类型:class java.lang.String
get方法:public java.lang.String com.mengya.PersonBean.getP()
set方法:public void com.mengya.PersonBean.setP(java.lang.String)

 

分享到:
评论

相关推荐

    JavaBean及内省文档

    在 JSP 页面中,可以使用三个特殊标签来操作 JavaBean: 1. `&lt;jsp:useBean&gt;`:用于查找或实例化 JavaBean。 2. `&lt;jsp:setProperty&gt;`:用于设置 JavaBean 的属性。 3. `&lt;jsp:getProperty&gt;`:用于获取 JavaBean 的...

    javabean基础教程

    - **内省(Introspection)**:允许组件揭示其属性和操作,便于其他组件的发现和重用。 - **通信(Communication)**:通过事件机制传递消息,实现组件间的交互。 - **持久性(Persistence)**:保存组件状态,以便在不同...

    minimalcode-reflect:JavaBean 的简约反射和内省功能

    总的来说,`minimalcode-reflect`是一个专注于JavaBean的反射和内省的框架,它简化了对JavaBean的常规操作,同时也提供了对字节码生成、注解处理和类型操作的支持,为Java开发带来了便利。通过深入理解和使用这个库...

    Java 内省(Introspector)深入理解

    Java内省(Introspector)是Java语言提供的一种机制,用于在运行时分析Java对象的属性、方法和事件。...了解并熟练掌握Java内省机制,可以提高代码的灵活性和可维护性,尤其是在处理基于JavaBean的复杂系统时。

    Java基础加强,成就java高手

    课程涵盖了多个关键知识点,包括Eclipse的使用技巧、静态导入、可变参数、增强for循环、基本数据类型的自动拆箱与装箱、枚举、反射、JavaBean内省、BeanUtils工具包、注解、泛型、类加载器、代理以及线程并发库等。...

    Java基础学习43.pdf

    内省机制(Introspection)是Java提供的一种工具,用于获取和操作JavaBeans对象的属性。例如,通过Introspector、BeanInfo和PropertyDescriptor等类,可以方便地获取和设置JavaBean的属性值。 BeanUtils是Apache ...

    Java基础学习44.pdf

    内省(Introspection)则主要用于JavaBean的属性操作,如`set`和`get`方法,配合`Instrospector`、`BeanInfo`和`PropertyDescriptor`,可以方便地读写JavaBean的属性。此外,了解并熟练运用这些技术,能够有效地提高...

    Java基础知识加强PPT

    本PPT旨在帮助对Java有一定基础的开发者进行复习和提升,通过简洁而全面的讲解,促进对关键知识点的理解和应用。 首先,我们来看看Eclipse的使用技巧。Eclipse是一款强大的集成开发环境(IDE),对于Java开发来说至...

    JavaBean与反射

    3. **操作成员信息**:利用`java.lang.reflect`包下的其他类,如`Method`、`Field`等,对获取的信息进行读取或修改。 获取`Class`对象的方式有三种: 1. **运行时类名获取**:当编译时不知道类名,但在运行时可以...

    JavaBean技术PPT学习教案.pptx

    在实际开发中,JavaBean经常被用在JSP中,作为页面的数据模型,通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)标签来访问和操作Bean的属性,从而实现动态网页的生成。此外,...

    Java内省实例解析

    总的来说,Java内省提供了一种强大的工具,让我们能够在运行时动态地探索和操作Java对象,特别是对于符合JavaBean规范的对象。这使得我们可以编写更加灵活、可复用的代码,而不需要对每个对象的内部结构有深入的了解...

    《安全编程技术》教学大纲.docx

    4. **内省和JavaBean原理分析**:内省是Java中用于探测对象属性和方法的技术,本章会介绍JavaBean的基本操作及其内省的复杂应用,利用`BeanUtils`工具进行操作。 5. **注解的了解和应用**:注解是元数据的一种形式...

    Java 内省introspector相关原理代码解析

    `Introspector` 是Java内省的核心类,它提供了一系列的方法来获取关于JavaBean的信息。例如,`Introspector.getBeanInfo(Class)` 方法可以获取指定类的BeanInfo,这包含了关于类的属性(PropertyDescriptor)、事件...

    java常用第三方软件包大全_.docx

    7. **Commons-beanutils**:通过反射和内省操作JavaBean,简化属性的获取和设置。 8. **Commons-codec**:包含多种编码算法,如Base64、Hex、URL编码等。 9. **Commons-collections**:提供了对Java集合框架的扩展...

    java_学习方向Microsoft Word 文档 (2)

    6. **BeanUtils工具**:Apache Commons提供的库,简化JavaBean操作。 7. **注解**:元数据,提供编译时和运行时信息,用于代码的自我描述。 8. **泛型**:提高类型安全,避免强制类型转换,减少运行时错误。 9. **类...

    Java基础加强(上) 经典ppt

    讲一些经典的:静态导入 自动装箱/拆箱 增强for循环 可变参数 内省(Introspector) — JavaBean ......

    java基础加强ppt(张孝祥版_黎活明版)

    java基础加强ppt(张孝祥版_黎活明版)eclipse的使用技巧、静态导入、可变参数与for循环增强、基本数据类型的自动拆箱与装箱、枚举、反射、JavaBean内省、beanutils工具包、注解、泛型、类加载器、代理、线程并发库

    张孝祥Java基础加强ppt.ppt

    eclipse的使用技巧 静态导入 可变参数与for循环增强 基本数据类型的自动拆箱与装箱 枚举 反射 JavaBean内省 beanutils工具包 注解 泛型 类加载器 代理 线程并发库

    Developing java Beans

    - **事件适配器(Event Adapters)**:提供了一个简单的基础类,可以从中选择性地覆盖感兴趣的方法来处理事件。 - **事件过滤(Event Filtering)**:允许根据特定条件过滤传入的事件。 - **事件队列(Event ...

Global site tag (gtag.js) - Google Analytics