1. 程式人生 > >@Autowired內部實現原理

@Autowired內部實現原理

dao boolean ice fields ann 打印 sys ava sta


@Autowired
private CustomerDao customerDao;

public void addCustomer() {

customerDao.addCustomer();

}


public static void main(String[] args) {
Class clazz = CustomerServiceImpl.class;
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
boolean present = field.isAnnotationPresent(Autowired.class);
if(present){
System.out.println(field.getGenericType());
System.out.println(field.getName());
}
}
}
這應該就是spring裏面的一段源碼
他是先獲取當前類的.class文件
然後再通過反射的方式獲取字段
然後遍歷字段
然後暴力反射獲取註解的.class文件
然後判斷這個文件是否存在不
如果存在,打印他的接口類型
上面這段代碼出來的效果如下:
interface cn.ql.dao.CustomerDao
customerDao
然後我又定義了個屬性方便理解
@Autowired
private String user;

他出來的結果是
class java.lang.String
user

@Autowired內部實現原理