在另一个服务中注入服务

War*_*ard 9 java spring spring-boot

我有UserService和MissionService.

可以在UserSerivce中注入MissionService,反之亦然?

如果是,那么单元测试呢?

Fab*_*ken 9

当然你可以,它是完美的.但我建议您使用方法注入,以便允许您在运行时设置实例而不使用反射(您可以手动创建实例).


例如:

@Service
public class MissionService { }

@Service
public class UserService {
    private MissionService missionService;

    @Autowired
    public void setMissionService(MissionService missionService) {
        this.missionService = missionService;
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许您使用常规Java而不使用Spring创建两个服务:

MissionService missionService = new MissioNService();
UserService userService = new UserService();
userService.setMissionService(missionService);
Run Code Online (Sandbox Code Playgroud)

警告:您必须注意不要构建依赖循环. 我认为Spring没有解决它们

  • 如果它是必需的依赖项,那么最好使用构造函数注入而不是方法注入,以使您明确需要提供依赖类。这样,某人无法实例化该类并开始使用依赖于该依赖服务的其他方法。 (2认同)