package com.beans; import java.beans.BeanInfo; import java.beans.Expression; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.beans.PropertyEditor; import java.beans.PropertyEditorManager; import java.io.FileInputStream; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.TreeMap; public class BeansTest { public static void main(String[] args) throws Exception { TreeMap<String,String> meth = meth(); System.out.println(meth); BeansTestTemp beansTemp = new BeansTestTemp(); Map map = new HashMap(); Properties pro = new Properties(); pro.setProperty("setStr", "str"); Object evaluatePo = BeansTest.evaluatePo("com.beans.BeansTestTemp", pro); System.out.println(evaluatePo); // Object evaluatePo2 = BeansTest.evaluatePo(beansTemp, pro); // System.out.println(evaluatePo2); } public static Object evaluatePo(String className, Properties prop) throws Exception { // Class<? extends Object> poClass = className.getClass(); Class<?> poClass = Class.forName(className); Object po = poClass.newInstance(); // Introspector相当beans这个架构的一个入口。 // 类似于Hibernate的SessionFactory// 通过bean的类型获得bean的描述—》获得属性描述的集合 BeanInfo bi = Introspector.getBeanInfo(poClass); PropertyDescriptor[] pd = bi.getPropertyDescriptors(); for (int i = 0; i < pd.length; i++) { String name = pd[i].getName(); System.out.println("name = " + name); String property = prop.getProperty(name); if (property != null) { Class<?> propertyType = pd[i].getPropertyType(); Object value = getPropValue(propertyType,property); executeEvaluate(po, pd[i].getWriteMethod(), value); } } return po; } // 这里是PropertyEditor 的使用,规避了if条件的使用。让代码的扩展性得到了很好的保证。 // 这里使用的是依赖查找(DL)的方式。// 注册PropertyEditor 的步骤放在了bean容器当中 static Object getPropValue(Class<?> clazz, String value) throws Exception { PropertyEditor pe = PropertyEditorManager.findEditor(clazz); pe.setAsText(value); return pe.getValue(); } // 调用赋值方法 static void executeEvaluate(Object dest, Method m, Object value) throws Exception { Expression e = new Expression(dest, m.getName(), new Object[] { value }); e.execute(); } private static TreeMap<String, String> meth() throws Exception { Properties prop=new Properties(); FileInputStream inputStream=new FileInputStream("src/a.properties"); prop.load(inputStream); inputStream.close(); TreeMap<String, String> treeMap=new TreeMap<String, String>((Map)prop); return treeMap; } } class BeansTestTemp{ private String str ; private int i ; public String getStr() { return str; } public void setStr(String str) { this.str = str; } public int getI() { return i; } public void setI(int i) { this.i = i; } @Override public String toString() { return "BeansTestTemp [str=" + str + ", i=" + i + "]"; } }
a.properties
a=1 b=2
相关推荐
JAVA API官方文档中文版软件包 java.applet java.awt java.awt.color ...java.beans.beancontext java.io java.lang java.lang.annotation java.lang.instrument java.lang.management java.lang.ref
轻巧,快速的java.beans.Introspector重新实现,用于消除对Bean Introspection的java.desktop模块的依赖。 问题 JDK 9中引入的模块封装了Java标准库中的所有AWT,Swing,Image和Sound软件包。 除此之外,它还包含带...
JDK 9中引入的模块封装了Java标准库中的所有AWT,Swing,Image和Sound软件包。 除此之外,它还包含带有帮助程序类的java.beans包,可以与Java Bean进行交互,特别是bean自省和属性更改侦听器。 由于它与AWT和Swing...
中文版,平时开发超...java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 ......
* java.beans 是 Java 2 Platform 的一部分,提供了与开发 beans 有关的类,即基于 JavaBeans TM 架构的组件。 13、输入/输出操作:java.io 通过数据流、序列化和文件系统提供系统输入和输出。 * java.io 是 Java ...
java.beans.beancontext java.io java.lang java.lang.annotation java.lang.instrument java.lang.management java.lang.ref java.lang.reflect java.math java.net java.nio java.nio.channels java....
java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 ...
java.beans.beancontext java.io java.lang java.lang.annotation java.lang.instrument java.lang.management java.lang.ref java.lang.reflect java.math java.net java.nio java.nio.channels java....
java.beans.beancontext java.io java.lang java.lang.annotation java.lang.instrument java.lang.management java.lang.ref java.lang.reflect java.math java.net java.nio java.nio.channels java....
java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 ...
10. `java.beans`:与JavaBeans组件开发相关,提供了`BeanInfo`、`PropertyEditor`等类,使得组件具有可配置性和可序列化性。 11. `java.io`:提供了输入输出流相关的类,如`FileInputStream`、`OutputStreamWriter...
java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 ...
java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java ...
java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java ...
java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java ...
java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java ...
**java.beans.beancontext** - **用途**: Bean上下文相关的类和接口。 - **关键类**: - `BeanContext`: Bean上下文的根接口。 #### 14. **java.io** - **用途**: 文件和数据流操作。 - **关键类**: - `File`...