1. 程式人生 > >java反射在spring中的應用

java反射在spring中的應用

   1.為什麼要用反射?

    根據物件可以得到該類的所有資訊,可以做直接操作物件不能做的事,它不是在編譯時執行,而是在執行時執行,也就是執行.class時執行,所以它可以做在編譯時不能做的事,像hibernate的屬性對映就是通過反射來賦值的,spring的bean的建立就是根據配置的class來反射構建的

  2.反射怎麼用

     我就不像網上說一大堆理論知識了,直接寫個spring注入的例子

<span style="font-size:18px;">public class ReflectDemo
{
    public static void main(String[] args)
    {

        try
        {
            String classPath = "com.chenjun.Compute";// 由spring中bean 的class屬性值傳進來

            Class class1 = Class.forName(classPath); // 這是獲得class物件最常用的方式,還有.class,getClass()兩種方式

            Object object = class1.newInstance();

            String attrName = "a";// 代表spring中待注入的屬性
            String attrValue = "hello";// 代表spring中待注入的屬性值
            Method method = class1.getMethod("set" + attrName.toUpperCase(), String.class);
            method.invoke(object, attrValue);// 呼叫setter方法為bean注入屬性值

            System.out.println(object.toString());

        }
        catch (SecurityException e)
        {
            e.printStackTrace();
        }

        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

class Compute
{

    private String a;

    public String getA()
    {
        return a;
    }

    public void setA(String a)
    {
        this.a = a;
    }

    @Override
    public String toString()
    {
        return a;
    }

}</span>

輸出:hello,說明注入成功,這個class對應的bean也就建立成功