java反射在spring中的應用
阿新 • • 發佈:2019-01-30
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也就建立成功