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


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

      后來做一個新項目時,發覺自己以前的寫的部分功能報錯,當時有點懵逼,,找了半天都沒發現哪里寫錯了,代碼啥的都確定無錯(這種時候最蛋疼,因為報錯不太准確),以前寫好的啥都沒改,突然報錯,經過蛋疼的排除,發現service層的注入都是null,但是還是一臉懵逼,我一直以為無區別,感覺自己的代碼無錯,經過長時間找尋(我感覺自己快要崩潰了),然后發現自己另一個類有相似的方法,就用的實體類不要樣當然還有一個用public一個用private,經過測試才發現用public的方法,調用controller里面注入類才能注入。但是為什么會這樣呢?為什么以前好好的,突然不可以了呢?

原因分析:

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

原來是我們老大在項目加AOP,加了AOP以后會有影響,如果controller層方法需要調用注入的bean或者service層,那么只能使用public。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM