Spring Service实现多个接口:好还是坏?

时间:2016-09-14 20:07:36

标签: java spring service

让Spring Service通过实现多个接口来分解其功能是不是一种坏习惯,然后让Spring使用只声明所需方法的接口注入一个Service实例?

像:

public interface OperationsService1 {

    public void operation1();

    public void operation2();

}


public interface OperationsService2 {

    public void operation3();

    public void operation4();

}

@Service
public class OperationsServiceImpl implements OperationsService1, OperationsService2 {

    public void operation1() {}

    public void operation2() {}

    public void operation3() {}

    public void operation4() {}

}

然后在调用类中:

@Autowire
private OperationsService1 ops1;

@Autowire
private OperationsService2 ops2;

2 个答案:

答案 0 :(得分:0)

从我的角度来看,这更像是设计问题而不是Spring问题。通常,一个类应该负责一个功能(参见SRP on wiki)。所以一个服务类应该实现一个服务接口。

答案 1 :(得分:0)

  

然后让Spring使用接口注入Service实例   在需要的地方只声明所需的方法?

首先,我觉得你很困惑。在您的示例中,不会成为每个接口的实例。当你打电话

@Autowire
private OperationsService1 ops1;

@Autowire
private OperationsService2 ops2;

它们都指向相同的OperationsServiceImpl类,因为默认情况下bean是单例。你在这里有一个实例和两个指向它的接口。通过自动装配接口,这意味着对于第一个接口,您只能调用bean中的一些方法,而第二个接口可以调用同一个bean的其他一些方法。

  

这是一个好习惯吗?

我不这么认为,通常会使用具有各种功能的多个对象实例的接口,如上所述,这不是这里的情况。如果其他类开始实现这些接口而你必须使用@Qualifier来区分它们,它会变得更加混乱。如果您想要一个干净的解决方案,请将OperationsServiceImpl分成两个单独的类,每个类都实现相应的接口。对新开发者来说,支持起来会更简单,更容易。