Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在另一个服务中注入服务_Java_Spring_Spring Boot - Fatal编程技术网

Java 在另一个服务中注入服务

Java 在另一个服务中注入服务,java,spring,spring-boot,Java,Spring,Spring Boot,我有用户服务和任务服务 在UserSerivce中注入MissionService可以吗?反之亦然 如果是,那么单元测试呢?当然可以,而且非常好。但是我建议您使用方法注入,以便允许您在运行时设置实例而不使用反射(您可以手动创建实例) 例如: @Service public class MissionService { } @Service public class UserService { private MissionService missionService; @A

我有用户服务和任务服务

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


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

当然可以,而且非常好。但是我建议您使用方法注入,以便允许您在运行时设置实例而不使用反射(您可以手动创建实例)


例如:

@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。你知道在哪里进行调查吗?要进行调查,请检查组件扫描配置。必须设置包含要扫描的服务的包。如果不指定组件扫描配置,默认情况下会扫描所有包(我相信是这样)。