内省:

通过内省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----内省相关推荐

  1. java内省操作类的属性

    java内省操作类的属性 1.取得指定类的属性的方法 2.操作指定类的属性的方法 3.得到指定类的属性数据类型的方法 package com.ma.introspector;import java.b ...

  2. java内省_java内省机制

    一.内省是什么.实现方式: 内省(Introspector)是Java语言对Bean类属性.事件的一种缺省处理方法. 例如类A中有属性name,那我们可以通过getName,setName来得到其值或 ...

  3. java内省的意思,java内省机制 + 内省是什么 + 内省实现方式 + 和反射的区别

    见:https://zhidao.baidu.com/question/434288330.html.http://blog.csdn.net/u014394715/article/details/5 ...

  4. java 内省源码_java 内省

    用内省来操作Bean会给程序带来很大的便利,特别是在很大的实体对象的时候,在其属性很多的时候要为其赋值的时候, package com.bean; public class User { privat ...

  5. 什么是java内省_Java内省实例解析

    图像中轮廓的个数,里面vector的size代表了轮廓上点的个数.了解JavaBean 内省对应的英文单词为IntroSpector,它主要用于对JavaBean进行操作,JavaBean是一种特殊的 ...

  6. java 内省机制_Java反射及 IoC原理、内省机制

    JAVA反射及IoC原理.JAVA内省 1. 反射反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述主要指程序可 ...

  7. java内省技术,Java内省技术

    一.什么是内省 在计算机科学中,内省是指计算机程序在运行时(Run time)检查对象(Object)类型的一种能力,通常也可以称作运行时类型检查. 不应该将内省和反射混淆.相对于内省,反射更进一步, ...

  8. 使用Introspector(Java内省机制)实现Map转换为JavaBean

    转载自 https://blog.csdn.net/u013905744/article/details/73167861 需求: 有一个Map对象 [java] view plaincopy Map ...

  9. java 内省 反射_Java的反射和内省

    1.反射 反射是指在运行过程中,可以获取任意类的属性和方法信息; 对于任意对象,都可以获取调用其任意方法; 这种动态获取类信息和动态调用对象方法的方式称为Java语言的反射机制; public cla ...

  10. java 内省机制_Java反射与内省机制总结

    Class对象封装了一个java类定义的成员变量.成员方法.构造方法.包名.类名等. 2.反射怎么用 1).获得java类的各个组成部分,首先需要获得代表java类的Class对象 获得Class对象 ...

最新文章

  1. 互联网协议 — OAuth2 第三方授权协议
  2. STM32 电机教程 18 - MC Workbench生成工程代码的电机调试
  3. zabbix API 删除host
  4. FTP的主动模式(PORT Mode)及被动模式(Passive Mode)
  5. MySQL分组函数的介绍
  6. BZOJ1485: [HNOI2009]有趣的数列
  7. *【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐打游戏(bfs,双元bfs,思维)
  8. c调用python gensim包_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
  9. Oracle创建序列,删除序列
  10. C++设计模式-工厂模式
  11. php删除二维数组的某一行某一列_php中怎么去除二维数组的某个字段?
  12. 东秦数模美赛校赛记录——紧急车辆位置.题目
  13. C语言如何打开shx文件,shx文件是什么 shx文件如何打开
  14. 希腊自助游 - 米岛圣岛,迷失在蓝白之间
  15. Python 珍藏函数超详解:随机抽样,分层抽样,系统抽样方法汇总
  16. 用VS实现图片的读取、显示与存储
  17. 腾讯云服务器手动建立WordPress个人站点Windows系统教程-Unirech腾讯云国际版代充
  18. [网鼎杯 2020 白虎组]PicDown(精讲)
  19. Windos测试IP和端口是否能访问
  20. android画机器人,cdr怎么绘制安卓小人?cdr安卓机器人制作教程

热门文章

  1. linux系统上不去网,linux 上不去网
  2. java -jar 指定main,java打包成jar并执行jar包中指定的main方法
  3. van-cell 取消点击_支付宝平安好医保怎么样?怎么报销?靠谱吗?怎么取消?_保险测评...
  4. linux嵌入式第一阶段,零基础学嵌入式编程系列第一阶段Linux操作系统基础知识.ppt...
  5. c语言实验二作业,C语言实验作业8 - osc_5p0xffsa的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. 计算机专业基础 -- 数据结构入门与算法基础知识
  7. java多继承_为什么 Java 不支持类多重继承?
  8. IDEA 不识别的MAVEN 项目应如何处理
  9. 使用锚标记返回网页顶部的方法
  10. oracle中DMP文件导入导出例子详解