Java 在另一个服务中注入服务
我有用户服务和任务服务 在UserSerivce中注入MissionService可以吗?反之亦然Java 在另一个服务中注入服务,java,spring,spring-boot,Java,Spring,Spring Boot,我有用户服务和任务服务 在UserSerivce中注入MissionService可以吗?反之亦然 如果是,那么单元测试呢?当然可以,而且非常好。但是我建议您使用方法注入,以便允许您在运行时设置实例而不使用反射(您可以手动创建实例) 例如: @Service public class MissionService { } @Service public class UserService { private MissionService missionService; @A
如果是,那么单元测试呢?当然可以,而且非常好。但是我建议您使用方法注入,以便允许您在运行时设置实例而不使用反射(您可以手动创建实例)
例如:
@Service
public class MissionService { }
@Service
public class UserService {
private MissionService missionService;
@Autowired
public void setMissionService(MissionService missionService) {
this.missionService = missionService;
}
}
这允许您在不使用Spring的情况下使用常规Java创建两个服务:
MissionService missionService = new MissioNService();
UserService userService = new UserService();
userService.setMissionService(missionService);
注意:您必须注意不要构建依赖循环。没有设置Spring解决它们,我认为如果它是必需的依赖,那么最好使用构造函数注入而不是方法注入,以明确您需要提供依赖类。这样,有些人就不能实例化该类并开始使用依赖于该依赖服务的其他方法。@Shawnclk当您说“有些人不能实例化该类并开始使用依赖于该依赖服务的其他方法”时,请想想:如果该方法在其声明中需要该服务,如果不提供服务类,我如何使用它?我不是在构造函数上要求它,而是在方法上要求它。在这两方面,我都不能使用这种方法。但是,如果注入依赖关系是通过控制器而不是方法实现的,我不清楚在哪些方法上真正需要注入依赖关系。出于某种原因,这对我不起作用。这两个服务都在同一个包中,都以正确的顺序安装,但第二个看到null。你知道在哪里进行调查吗?要进行调查,请检查组件扫描配置。必须设置包含要扫描的服务的包。如果不指定组件扫描配置,默认情况下会扫描所有包(我相信是这样)。