是否必须在ServiceImpl类上添加@Service注解?移除后功能失效
疑问:Spring中ServiceImpl类必须加@Service注解吗?
我编写了如下代码:
package com.foodpay.service.Impl; import org.springframework.stereotype.Service; @Service public class FoodServiceImpl implements FoodService { }
当我移除该ServiceImpl类上的@Service注解后,程序无法正常运行了,想咨询是否必须在ServiceImpl类上添加该注解?
解答
不是必须加@Service注解,但你的当前程序依赖它来管理Bean,所以移除后会报错。
具体说明:
- Spring框架需要将类识别为容器内的Bean,才能完成依赖注入等核心功能。
@Service是Spring提供的 stereotype 注解之一,专门用来标记业务层组件,作用是让Spring的组件扫描机制自动发现这个类,并创建它的实例纳入容器管理。 - 如果你不想用
@Service,还有其他方式让Spring管理FoodServiceImpl这个Bean:- 在配置类中通过
@Bean手动注册:@Configuration public class AppConfig { @Bean public FoodService foodService() { return new FoodServiceImpl(); } } - 使用XML配置文件注册Bean(传统方案,现在较少使用):
<bean id="foodService" class="com.foodpay.service.Impl.FoodServiceImpl"/>
- 在配置类中通过
- 你的程序之前能正常运行,是因为
@Service让Spring自动实例化了FoodServiceImpl,并注入到所有依赖它的地方。移除注解后,Spring找不到该类的Bean实例,依赖注入环节失败,自然会导致程序启动报错。
内容的提问来源于stack exchange,提问作者Faraz Ali
相关产品推荐
相关产品推荐

