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

在不同路径控制器中使用CarService,是否必须用@Resource或@Autowired?

无需@Autowired/@Resource使用CarService的可行方案

Spring确实已经把CarService的实例纳入容器管理了,但控制器要用到这个Bean,还是得通过依赖注入机制,不过确实可以不用显式写@Autowired或@Resource,下面是几种实用的方式:

1. 构造器注入(用Lombok简化)

给你的控制器加上@RequiredArgsConstructor注解,同时把CarService声明为private final成员变量——Lombok会自动帮你生成带这个参数的构造器,而Spring 4.3+版本会自动给只有单个构造器的类注入构造器参数对应的Bean,完全不用写注入注解:

@RestController
@RequiredArgsConstructor
public class CarController {
    private final CarService carService;

    @GetMapping("/cars")
    public List<Car> getCars() {
        return carService.list();
    }
}

这种方式是现在Spring官方推荐的注入方式,既避免了空指针风险,又不用写冗余的注解。

2. 请求方法参数直接注入

如果只是在某个请求处理方法里用到CarService,可以直接把它作为方法参数,Spring会自动注入实例:

@RestController
public class CarController {
    @GetMapping("/cars")
    public List<Car> getCars(CarService carService) {
        return carService.list();
    }
}

不过这种方式只能在当前方法里用这个Bean,控制器的其他方法没法复用,适合简单场景。

避坑提醒

绝对不要直接用new CarServiceImpl()来创建对象——这样生成的实例不在Spring容器里,不仅没法用Spring的事务、AOP等功能,而且如果CarServiceImpl依赖了CarMapper这类容器内的Bean,手动new会直接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:39:53