让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;
答案 0 :(得分:0)
从我的角度来看,这更像是设计问题而不是Spring问题。通常,一个类应该负责一个功能(参见SRP on wiki)。所以一个服务类应该实现一个服务接口。
答案 1 :(得分:0)
然后让Spring使用接口注入Service实例 在需要的地方只声明所需的方法?
首先,我觉得你很困惑。在您的示例中,不会成为每个接口的实例。当你打电话
@Autowire
private OperationsService1 ops1;
@Autowire
private OperationsService2 ops2;
它们都指向相同的OperationsServiceImpl类,因为默认情况下bean是单例。你在这里有一个实例和两个指向它的接口。通过自动装配接口,这意味着对于第一个接口,您只能调用bean中的一些方法,而第二个接口可以调用同一个bean的其他一些方法。
这是一个好习惯吗?
我不这么认为,通常会使用具有各种功能的多个对象实例的接口,如上所述,这不是这里的情况。如果其他类开始实现这些接口而你必须使用@Qualifier来区分它们,它会变得更加混乱。如果您想要一个干净的解决方案,请将OperationsServiceImpl分成两个单独的类,每个类都实现相应的接口。对新开发者来说,支持起来会更简单,更容易。