springMVC中controller層方法中使用private和public問題

樓主一直習慣使用public,偶爾手誤也可能使用private,可是發覺也沒啥區別,都能調用service層,注入bean。測試

      後來作一個新項目時,發覺本身之前的寫的部分功能報錯,當時有點懵逼,,找了半天都沒發現哪裏寫錯了,代碼啥的都肯定無錯(這種時候最蛋疼,由於報錯不太準確),之前寫好的啥都沒改,忽然報錯,通過蛋疼的排除,發現service層的注入都是null,可是仍是一臉懵逼,我一直覺得無區別,感受本身的代碼無錯,通過長時間找尋(我感受本身快要崩潰了),而後發現本身另外一個類有類似的方法,就用的實體類不要樣固然還有一個用public一個用private,通過測試才發現用public的方法,調用controller裏面注入類才能注入。可是爲何會這樣呢?爲何之前好好的,忽然不能夠了呢?代理

緣由分析:容器

容器掃描bean生成代理類的時候,public和protected方法能夠被正常代理,而private方法的不會被代理,屬性的注入也是在代理類中完成,因此public/protected方法獲取的注入屬性是完成注入的屬性,private方法獲取的是未完成注入時的屬性,因此是null。service

原來是咱們老大在項目加AOP,加了AOP之後會有影響,若是controller層方法須要調用注入的bean或者service層,那麼只能使用public。

方法

相關文章
相關標籤/搜索