You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring MVC应用中@Resource注入List引发空指针异常求助

解决Spring MVC中FBContainer的products集合NullPointerException问题

我来帮你排查这个导致NullPointerException的问题,核心原因是FBContainer里的products集合没有被正确注入,下面是几个可能的原因和对应的解决办法:

1. 注解注入与XML配置的冲突

你在FBContainer类中使用了@Resource(name = "FBList")注入List<FBProduct>,同时又在dispatcher-servlet.xml里通过<property>标签给FBContainer注入products属性。这两种注入方式同时存在时,很可能会导致Spring的注入逻辑混乱,最终使得products字段为null。

解决思路:二选一即可

  • 如果你想保留XML配置:删除FBContainerproducts字段上的@Resource注解,同时确保XML里的<property>配置正确指向FBList的id:

    <bean id="FBContainer" class="com.yourpackage.FBContainer">
        <!-- 确保name属性和FBContainer里的字段名/setter方法名匹配 -->
        <property name="products" ref="FBList"/>
    </bean>
    <util:list id="FBList">
        <!-- 这里添加FBProduct的实例配置,比如: -->
        <bean class="com.yourpackage.FBProduct"/>
    </util:list>
    

    同时要保证FBContainer有对应的setProducts(List<FBProduct> products)方法,Spring通过setter完成XML注入。

  • 如果你想保留注解注入:删除XML中FBContainer<property>配置,同时确保:

    • FBContainer被Spring管理(比如加了@Component注解,或者XML里配置了该Bean)
    • 配置了<context:component-scan base-package="com.yourpackage"/>来扫描注解
    • @Resource(name = "FBList")的name值和XML中<util:list>的id完全一致

2. 检查注入的必要条件

  • 如果用XML的<property>注入:必须存在对应的setter方法,Spring无法直接注入没有setter的私有字段(除非开启字段注入的支持,但XML配置默认依赖setter)。
  • 如果用注解注入:确保FBContainer已经被Spring识别为Bean,要么加@Component等注解,要么在XML里配置了该Bean,同时组件扫描范围覆盖了这个类所在的包。

3. 确认FBList的配置有效性

检查dispatcher-servlet.xml里的<util:list id="FBList"是否正确:

  • id是否拼写正确,和@Resource的name或者XML里的ref值一致
  • list内部是否正确初始化了FBProduct实例,如果list本身配置错误,可能导致注入失败

4. 调试小技巧

  • FBContainersetProducts方法里添加日志输出,看看这个方法是否被Spring调用,以及传入的list是否为null:
    public void setProducts(List<FBProduct> products) {
        System.out.println("Products注入:" + products);
        this.products = products;
    }
    
  • 或者在FBContainer的构造方法里打印日志,确认Bean是否被正确初始化。

内容的提问来源于stack exchange,提问作者Danil.B

火山引擎 最新活动