对于这个,我是简单写一点,之前看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反射的使用)。