You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RestController中使用@ManagedProperty注入SslService为空问题求助

问题分析与解决方法

嗨,这个问题我碰到过不少次,核心原因其实是注解的容器不兼容,咱们一步步拆解:

为什么会出现null?

@ManagedProperty是JSF(JavaServer Faces)框架专属的注入注解,它的作用范围是JSF容器管理的Bean(比如你第一个例子里的@ManagedBean)。而@RestController是Spring框架的注解,对应的Bean是由Spring IoC容器管理的——Spring根本不认识JSF的@ManagedProperty,自然不会帮你完成注入,所以你的service字段就一直是null。

解决方法

把JSF的注入方式换成Spring支持的注入注解就行,这里给你几种常用方案:

方案1:使用Spring的@Autowired(最推荐)

直接在SslService字段上添加@Autowired注解,Spring会自动匹配类型对应的Bean完成注入:

@RestController
@RequestMapping("/payment")
public class PaymentController {
    ...
    @Autowired
    SslService service;

    @PostConstruct
    public void init() {
        this.ssl_list = service.listSsl();
    }
    ...
}

注意:如果你的Spring版本比较新(Spring 4.3+),甚至可以不用写setter方法,直接字段注入就行。

方案2:使用@Resource指定Bean名称

如果你需要明确指定Bean的名称(和你之前@ManagedProperty("#{sslService}")的写法对应),可以用@Resource注解:

@RestController
@RequestMapping("/payment")
public class PaymentController {
    ...
    @Resource(name = "sslService")
    SslService service;

    @PostConstruct
    public void init() {
        this.ssl_list = service.listSsl();
    }
    ...
}

关键前提检查

别忘了确保你的SslService已经被Spring容器管理!要在SslService类上添加Spring的组件注解,比如:

@Service // 或者@Component、@Repository,根据业务场景选择
public class SslService {
    // 你的业务逻辑代码
}

内容的提问来源于stack exchange,提问作者Matt Vegas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:19:15