Java Spring—如何避免协作服务之间的实现锁定

Java Spring—如何避免协作服务之间的实现锁定,java,spring,dependency-injection,Java,Spring,Dependency Injection,我正在编写一个使用spring进行DI的小框架。我有许多相互协作的服务 ServiceA引用ServiceB-引用ServiceC等。所有这些都预先连接在spring配置xml中 当用户试图用自己的实现(比如ChildServiceB)覆盖其中一个实现(比如ServiceB)时,就会出现问题。现在,我真正想要的是,用户ChildSerivceB应该连接到ServiceA。春天能做吗?如果不是,那么对于这个场景,什么是最好的设计模式 我要找的是春天的晚装 我希望在这种情况下,用户的spring配置

我正在编写一个使用spring进行DI的小框架。我有许多相互协作的服务

ServiceA引用ServiceB-引用ServiceC等。所有这些都预先连接在spring配置xml中

当用户试图用自己的实现(比如ChildServiceB)覆盖其中一个实现(比如ServiceB)时,就会出现问题。现在,我真正想要的是,用户ChildSerivceB应该连接到ServiceA。春天能做吗?如果不是,那么对于这个场景,什么是最好的设计模式

我要找的是春天的晚装

我希望在这种情况下,用户的spring配置需要尽可能少

其他注意事项:

我的所有服务都使用接口

为了方便使用默认服务的人,jar中提供了spring congiuration framework-beans.xml,他们只需要实例化它

想要覆盖实现的用户可以创建自己的beans.xml,但这正是我要解决的问题,他们如何覆盖framework-beans.xml的“连接”

当用户试图用自己的实现(比如ChildServiceB)覆盖其中一个实现(比如ServiceB)时,就会出现问题。现在,我真正想要的是,用户ChildSerivceB应该连接到ServiceA。春天能做吗?如果不是,那么对于这个场景,什么是最好的设计模式

1使用接口编程
2让用户为
ServiceB

3在SpringXML中配置Bean

<bean name="serviceB" class="com.something.DefaultServiceBImpl"/>

现在,如果您希望用户拥有自己的实现,只需将其更改为

<bean name="serviceB" class="com.something.CustomServiceBImpl"/>


在类中使用接口

Hi Jigar,我正在使用接口,但是这里的问题是,在我的framework-beans.xml中,它已经硬连接到DefaultServiceImpl(在jar中)。客户端程序中的用户必须在user-beans.xml中提供相同的名称“serviceB”,这会“隐藏”我听说这不是一个好的做法,我甚至不确定它是否会重新连接引用。那么上述解决方案有什么问题?请参阅我的“编辑到第一条评论”,我过早地按了enter键