首页 > 编程知识 正文

spring注入bean注解(注入bean)

时间:2023-05-04 15:18:40 阅读:102198 作者:4018

为了说明这个问题,作者用伪码故事来描述。

今天psdjm来到一家公司入职,发现公司的代码对日志处理非常不利,全部直接硬编码在代码中,没有统一处理。代码如下

Psdjm同学马上想到,有没有可能通过AOP统一操作项目日志?说出来就写代码。

然后,开发完成后,对大方红酒进行简单测试,发现aop运行正常,达到了效果。

然后psdjm把项目上线,上线1分钟后,突然有很多方法在线报错,导致NPE异常。

快速回滚代码。后来,psdjm检查了代码,发现项目中有人将控制器中的方法写成了private。

至关重要的是,在添加aop之前,该方法正常工作。一旦添加了aop,UserService发现它不能被注入到spring容器中,这导致了NPE。

分析原因

Spring处理@autowire注释当bean实例化时,在初始化之前。另一方面,控制器类生成代理在bean初始化后生成。此时,虽然代理继承了控制器对象的属性并具有@autowire注释,但spring不再处理@autowire注释。

因此,原始控制器在春季正常生成,autowire生效,代理在春季稍后添加到容器中,autowire不生效。

由于私有的方法不会被代理类调用到原始类,因此无法获得注入的属性。公共方法可以。

这就是为什么会出现以下现象。

结论

控制器方法,不要写私有RequestMapping方法,否则会不小心入坑。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。