spring這種@Resource或者@Autowired這種如何去注入bean
阿新 • • 發佈:2018-12-26
對於這個,我是簡單寫一點,之前看spring的原始碼中,對於bean的定義的封裝中,我們發現其中用到了反射中的很多內容,簡單的做了一個dome模擬這個沒有set也沒有構造方法的注入:
首先如下:
public class User {
private String name;private String toCall;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getToCall() {
return toCall;
}
public void setToCall(String toCall) {
this.toCall = toCall;
}
}
呼叫的service如下:
public class Test3Dome {
private User user;
public void testUser(){
System.out.println(user!=null?user.getToCall()+"; user is not null":"user is null");
}
}
然後如何把User注入到裡面:
User user=new User();
user.setName("hahah");
user.setToCall("------");
Test3Dome test3Dome=new Test3Dome();
Field field=Test3Dome.class.getDeclaredField("user");
//下面的是關鍵,這個是private能注入成功的關鍵
field.setAccessible(true);
field.set(test3Dome,user);
這樣就好了,結果成功為------; user is not null
這樣就是spring沒有set方法和構造方法注入成功的關鍵(jdk反射的使用)。