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。

方法

相关文章
相关标签/搜索