Spring-MVC @Autowired 注入成功几次后就为null

本文深入探讨了在Spring MVC框架中使用@Scope(prototype)注解的Entity类时遇到的问题及解决方案。当Entity类被注解为原型作用域时,在Controller中的@Autowired依赖注入可能不会按预期工作,导致实体对象在多次请求后变为null。文章提供了两种解决策略:一是将Controller也设置为原型作用域;二是推荐使用动态获取Bean的方法,通过WebApplicationContext获取特定的Bean实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:如标题所说,程序中有一个Entity的类,使用了@Component 和 @Scope("prototype") 注解。Entity这种类对应的是数据库的表,定是要多例。但在spring-mvc启动的时候,实现无参构造函数,断点发现只调用了两次就不再调用。PS(在该Entity类上用了多少个@Autowired就调用了多少次)。多次调用Controller中方法后,entity居然注入为null。

解决方法:1.Entity 和 使用的Autowired注入的两个类都是用@Scope("prototype") 进行注解,比如我的Controller类中有,那么Controller类也得用@Scope("prototype"),每次请求也得重新创建Controller。Entity也就重新创建。

2.Spring建议Controller使用单利,这样有助于提高性能。方法1虽能解决,但我建议使用动态直接获取方法。即使用WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();

wac.getBean("xxxx");

 

敬上错别字,收下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值