楼主一直习惯使用public,偶尔手误也可能使用private,但是发觉也没啥区别,都能调用service层,注入bean。
后来做一个新项目时,发觉自己以前的写的部分功能报错,当时有点懵逼,,找了半天都没发现哪里写错了,代码啥的都确定无错(这种时候最蛋疼,因为报错不太准确),以前写好的啥都没改,突然报错,经过蛋疼的排除,发现service层的注入都是null,但是还是一脸懵逼,我一直以为无区别,感觉自己的代码无错,经过长时间找寻(我感觉自己快要崩溃了),然后发现自己另一个类有相似的方法,就用的实体类不要样当然还有一个用public一个用private,经过测试才发现用public的方法,调用controller里面注入类才能注入。但是为什么会这样呢?为什么以前好好的,突然不可以了呢?
原因分析:
容器扫描bean生成代理类的时候,public和protected方法可以被正常代理,而private方法的不会被代理,属性的注入也是在代理类中完成,所以public/protected方法获取的注入属性是完成注入的属性,private方法获取的是未完成注入时的属性,所以是null。
原来是我们老大在项目加AOP,加了AOP以后会有影响,如果controller层方法需要调用注入的bean或者service层,那么只能使用public。