java----内省
内省:
通过内省Api来装配一个bean对象,bean对象的值是通过配置文件来获取
即通过配置文件中的属性和特定的类信息来,来组装一个对象,便于维护;
内省机制是通过反射来实现的,BeanInfo用来暴露一个bean的属性、方法和事件,以后我们就可以操纵该JavaBean的属性
首先生成一个利用类的无参构造器生成一个对象,再利用BeanInfo 给这个对象添加属性; 注意:该类必须设置一个无参构造器。或者实例化的时候注意需要带上相应的参数;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;public class Demo {public static void main(String[] args) {try {Config bean = ((Config) BeanFactory.getBean("bean.name"));System.out.println(bean);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();}}
}
class Config{private String username;private String password;private String url;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}@Overridepublic String toString() {return "Config{" +"username='" + username + '\'' +", password='" + password + '\'' +", url='" + url + '\'' +'}';}
}
class BeanFactory{private static Properties p = new Properties();//使用静态代码块读取配置文件static {InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("com\\first\\conf.properties");try {p.load(inStream);} catch (IOException e) {e.printStackTrace();}}public static Object getBean(String name) throws ClassNotFoundException, IllegalAccessException, InstantiationException {String beanName = p.getProperty(name);//获取类信息Class<?> aClass = Class.forName(beanName);//实例化一个bean对象Object bean = aClass.newInstance();try {//通过类信息,获取javaBean的描述信息,所以 内省 基于 反射 进行 BeanInfo beanInfo = Introspector.getBeanInfo(aClass);//通过描述信息,获取该类的所有属性描述器,该类必须将属性字段设置get和set方法;(才能获取)PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();for (int i = 0; i < propertyDescriptors.length; i++) {String propertyName = propertyDescriptors[i].getName();Method writeMethod = propertyDescriptors[i].getWriteMethod();if ("username".equals(propertyName)){//相当于调用了属性的set方法writeMethod.invoke(bean,p.getProperty("user.name"));}else if("password".equals(propertyName)){writeMethod.invoke(bean,p.getProperty("user.password"));}else if("url".equals(propertyName)){writeMethod.invoke(bean,p.getProperty("url"));}}} catch (IntrospectionException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}return bean;}
}
配置文件 com\first\conf.properties
bean.name=com.first.Config
user.name=admin
user.password=admin
url=http://www.baidu.com
转载于:https://www.cnblogs.com/yanxiaoge/p/10753346.html
java----内省相关推荐
- java内省操作类的属性
java内省操作类的属性 1.取得指定类的属性的方法 2.操作指定类的属性的方法 3.得到指定类的属性数据类型的方法 package com.ma.introspector;import java.b ...
- java内省_java内省机制
一.内省是什么.实现方式: 内省(Introspector)是Java语言对Bean类属性.事件的一种缺省处理方法. 例如类A中有属性name,那我们可以通过getName,setName来得到其值或 ...
- java内省的意思,java内省机制 + 内省是什么 + 内省实现方式 + 和反射的区别
见:https://zhidao.baidu.com/question/434288330.html.http://blog.csdn.net/u014394715/article/details/5 ...
- java 内省源码_java 内省
用内省来操作Bean会给程序带来很大的便利,特别是在很大的实体对象的时候,在其属性很多的时候要为其赋值的时候, package com.bean; public class User { privat ...
- 什么是java内省_Java内省实例解析
图像中轮廓的个数,里面vector的size代表了轮廓上点的个数.了解JavaBean 内省对应的英文单词为IntroSpector,它主要用于对JavaBean进行操作,JavaBean是一种特殊的 ...
- java 内省机制_Java反射及 IoC原理、内省机制
JAVA反射及IoC原理.JAVA内省 1. 反射反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述主要指程序可 ...
- java内省技术,Java内省技术
一.什么是内省 在计算机科学中,内省是指计算机程序在运行时(Run time)检查对象(Object)类型的一种能力,通常也可以称作运行时类型检查. 不应该将内省和反射混淆.相对于内省,反射更进一步, ...
- 使用Introspector(Java内省机制)实现Map转换为JavaBean
转载自 https://blog.csdn.net/u013905744/article/details/73167861 需求: 有一个Map对象 [java] view plaincopy Map ...
- java 内省 反射_Java的反射和内省
1.反射 反射是指在运行过程中,可以获取任意类的属性和方法信息; 对于任意对象,都可以获取调用其任意方法; 这种动态获取类信息和动态调用对象方法的方式称为Java语言的反射机制; public cla ...
- java 内省机制_Java反射与内省机制总结
Class对象封装了一个java类定义的成员变量.成员方法.构造方法.包名.类名等. 2.反射怎么用 1).获得java类的各个组成部分,首先需要获得代表java类的Class对象 获得Class对象 ...
最新文章
- 互联网协议 — OAuth2 第三方授权协议
- STM32 电机教程 18 - MC Workbench生成工程代码的电机调试
- zabbix API 删除host
- FTP的主动模式(PORT Mode)及被动模式(Passive Mode)
- MySQL分组函数的介绍
- BZOJ1485: [HNOI2009]有趣的数列
- *【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐打游戏(bfs,双元bfs,思维)
- c调用python gensim包_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
- Oracle创建序列,删除序列
- C++设计模式-工厂模式
- php删除二维数组的某一行某一列_php中怎么去除二维数组的某个字段?
- 东秦数模美赛校赛记录——紧急车辆位置.题目
- C语言如何打开shx文件,shx文件是什么 shx文件如何打开
- 希腊自助游 - 米岛圣岛,迷失在蓝白之间
- Python 珍藏函数超详解:随机抽样,分层抽样,系统抽样方法汇总
- 用VS实现图片的读取、显示与存储
- 腾讯云服务器手动建立WordPress个人站点Windows系统教程-Unirech腾讯云国际版代充
- [网鼎杯 2020 白虎组]PicDown(精讲)
- Windos测试IP和端口是否能访问
- android画机器人,cdr怎么绘制安卓小人?cdr安卓机器人制作教程
热门文章
- linux系统上不去网,linux 上不去网
- java -jar 指定main,java打包成jar并执行jar包中指定的main方法
- van-cell 取消点击_支付宝平安好医保怎么样?怎么报销?靠谱吗?怎么取消?_保险测评...
- linux嵌入式第一阶段,零基础学嵌入式编程系列第一阶段Linux操作系统基础知识.ppt...
- c语言实验二作业,C语言实验作业8 - osc_5p0xffsa的个人空间 - OSCHINA - 中文开源技术交流社区...
- 计算机专业基础 -- 数据结构入门与算法基础知识
- java多继承_为什么 Java 不支持类多重继承?
- IDEA 不识别的MAVEN 项目应如何处理
- 使用锚标记返回网页顶部的方法
- oracle中DMP文件导入导出例子详解