反射呼叫service層,@Autowired注入失敗的解決方案
阿新 • • 發佈:2019-01-10
背景:
想在Controller層做一個反射,動態呼叫Service層的各種方法。實踐發現,反射呼叫Service層後,Service層中@Autowired注入的Dao失效了。
原因:
反射機制脫離了spring容器的管理,導致@Autowired失效。
解決方案:
將Service層程式碼修改,注意改動後增加的程式碼。
@Service public class UserService { @Autowired private UserMapper userMapper; //新增程式碼 開始 注意此段 public static UserService dynamicProxy; @PostConstruct public void init() { System.out.println("userMapper init"); dynamicProxy = this; } //新增程式碼 結束 public List<User> queryList() { System.out.println("Row22.UserService="+dynamicProxy.userMapper); List<User> users=dynamicProxy.userMapper.queryList(); return users; } public String GetNameByID(int ID) { String temp=userMapper.GetNameByID(ID); return temp; } }