java内省 introspector
Posted Advancing Swift
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java内省 introspector相关的知识,希望对你有一定的参考价值。
javaBeans 属性的概念
不只是字段,而是其get set 方法
且该get方法有返回值的称为属性,继承Object类的getClass方法
package com.swift.demo1; public class Person { String name; int age; String password; 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; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getAd() {//这个算一个属性,虽让没有字段,但如果没有返回值不算一个属性 return "getAd....."; } }
属性个数
package com.swift.demo1; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import org.junit.jupiter.api.Test; public class TestIntro { @Test public void test1() throws Exception { BeanInfo info=Introspector.getBeanInfo(Person.class); PropertyDescriptor[] pds=info.getPropertyDescriptors(); for(PropertyDescriptor des:pds) { System.out.println(des.getName()); } } }
阻止父类的getClass属性用
package com.swift.demo1; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import org.junit.jupiter.api.Test; public class TestIntro { @Test public void test1() throws Exception { BeanInfo info=Introspector.getBeanInfo(Person.class,Object.class); PropertyDescriptor[] pds=info.getPropertyDescriptors(); for(PropertyDescriptor des:pds) { System.out.println(des.getName()); } } }
BeanUtils使用jar包
需要两个:
都可以在Apache网站下载
BeanUtils具有比Introspector更强大的功能,可以在基本数据类型间直接转换,也可以把文本框中的字符串通过注册器转换器进行转换
自己转日期格式
package com.swift.demo1; import java.lang.reflect.InvocationTargetException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.Converter; import org.junit.Test; public class TestUtils { @Test public void test() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { Person p=new Person(); ConvertUtils.register(new Converter() { @Override public Object convert(Class type, Object value) { String str=(String) value; SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); try { return sdf.parse(str); } catch (ParseException e) { throw new RuntimeException(e);// } } }, Date.class); BeanUtils.setProperty(p, "name", "swift"); BeanUtils.setProperty(p, "age", "30"); BeanUtils.setProperty(p, "password", "123"); BeanUtils.setProperty(p, "date", "2018-02-19"); System.out.println(p.getName()); System.out.println(BeanUtils.getProperty(p, "name")); System.out.println(BeanUtils.getProperty(p, "age")); System.out.println(BeanUtils.getProperty(p, "password")); System.out.println(BeanUtils.getProperty(p, "date")); } }
可以用现成的
package com.swift.demo1; import java.lang.reflect.InvocationTargetException; import java.util.Date; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.locale.converters.DateLocaleConverter; import org.junit.Test; public class TestUtils { @Test public void test() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { Person p=new Person(); ConvertUtils.register(new DateLocaleConverter(),Date.class); BeanUtils.setProperty(p, "name", "swift"); BeanUtils.setProperty(p, "age", "30"); BeanUtils.setProperty(p, "password", "123"); BeanUtils.setProperty(p, "date", "2018-02-19"); System.out.println(p.getName()); System.out.println(BeanUtils.getProperty(p, "name")); System.out.println(BeanUtils.getProperty(p, "age")); System.out.println(BeanUtils.getProperty(p, "password")); System.out.println(BeanUtils.getProperty(p, "date")); } }
集合map加到BeanUtils
package com.swift.demo1; import java.lang.reflect.InvocationTargetException; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.locale.converters.DateLocaleConverter; import org.junit.Test; public class TestUtils { @Test public void test() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { Person p=new Person(); ConvertUtils.register(new DateLocaleConverter(),Date.class); BeanUtils.setProperty(p, "name", "swift"); BeanUtils.setProperty(p, "age", "30"); BeanUtils.setProperty(p, "password", "123"); BeanUtils.setProperty(p, "date", "2018-02-19"); System.out.println(p.getName()); System.out.println(BeanUtils.getProperty(p, "name")); System.out.println(BeanUtils.getProperty(p, "age")); System.out.println(BeanUtils.getProperty(p, "password")); System.out.println(BeanUtils.getProperty(p, "date")); } @Test public void test1() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { Person p=new Person(); ConvertUtils.register(new DateLocaleConverter(),Date.class); Map<String, String> map=new HashMap<String, String>(); map.put("name", "swift"); map.put("age", "30"); map.put("password", "123"); map.put("date", "2018-02-19"); BeanUtils.populate(p, map); System.out.println(p.getName()); System.out.println(BeanUtils.getProperty(p, "name")); System.out.println(BeanUtils.getProperty(p, "age")); System.out.println(BeanUtils.getProperty(p, "password")); System.out.println(BeanUtils.getProperty(p, "date")); } }
以上是关于java内省 introspector的主要内容,如果未能解决你的问题,请参考以下文章
[新手学Java]使用内省(Introspector)操作JavaBean属性