我的反射Java reflect

反射理解

反射是针对类Class. Class又可以做什么呢?
Class 可以知道类里面的属性, 方法. 知道方法又可以做什么呢?
知道方法可以反过来调用实体类.
一般过程 object.method  ( 实体类+ . + 方法名) 调用方法
反射过程 method.invoke(object)  (方法名.invoke(实体类))

反射应用

框架都是在反射的基础上搭建的,Spring, mybatis等流行框架.
然而对我们有什么关系呢?
在实际应用上,反射能帮我们减少很多工作,简化代码,构建清晰通用代码.

反射实例

基本bean类
public class Source {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
测试方法
 public static void main(String[] args) {
        try {
            Source source = new Source();
            // 直接调用 (实体类.方法名)
            source.setId(1);
            // 反射调用 (方法名.invoke(实体类))

            Method setNameMethod = Source.class.getMethod("setName", String.class);
            setNameMethod.invoke(source, "xlroce");

            // 直接调用
            String name = source.getName();
            // 反射调用
            Method getIdMethod = Source.class.getMethod("getId");
            Integer id = (Integer) getIdMethod.invoke(source);
            // 输出
            System.out.println("name : " + name);
            System.out.println("id : " + id);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
注意 : class.getMethod(方法名, 参数类型) , 因为java是多态的,因此你要确定你要获得的是哪一个.
一般人一般也不会这么操作方法,But 我们是程序猿.^_^

举个栗子

场景: 现在传入一个实体Bean 你要获得他的所有属性
So easy : source.getId()   source.getName();
OK?
OK
But 能做成工具类吗?
额......
Here is the xxxing code
public static void printSimpleBeanValue(Object object, Class clazz){

        //获得所有方法
        Method methods[] = clazz.getMethods();
        for( Method method : methods){
            //获得get方法
            if("get".equals(method.getName().substring(0, 3))){
                try {
                    Object value = method.invoke(object);
                    System.out.println( value.toString() );
                } catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }

你可能感兴趣的:(java,反射,反射,java,reflect)