在我的项目中,我有一个用 org.springframework.stereotype.Service 标签注释的界面。
对于这个接口,我有两种不同的实现。
在我的管理 bean 中,我正在注入接口服务类并使用它的方法。
现在我的要求是,在运行时我必须选择特定的实现(比如说基于登录用户组),以便可以调用相应的逻辑。
根据我的理解,我们可以在 java 中使用工厂模式来实现这一点并实现相同的目标。
我们如何在 SPRing 中实现这一点???
在我的项目中,我有一个用 org.springframework.stereotype.Service 标签注释的界面。
对于这个接口,我有两种不同的实现。
在我的管理 bean 中,我正在注入接口服务类并使用它的方法。
现在我的要求是,在运行时我必须选择特定的实现(比如说基于登录用户组),以便可以调用相应的逻辑。
根据我的理解,我们可以在 java 中使用工厂模式来实现这一点并实现相同的目标。
我们如何在 SPRing 中实现这一点???
除了上面建议的相关主题外,JavaRanch 上有一个很好的线程。
您可以使用
@Qualifier("myServiceImpl1") 注释与@Autowired 一起使用。在这种情况下,接口的这个特定实现将被注入。您还应该在 @Component、@Service 或 @Repository 注释中使用相同的名称,例如
@Service("myServiceImpl1")
public class MyServiceImpl1 implements MyService{}
public class Consumer{
@Autowired
@Qualifier("myServiceImpl1")
public MyService myServiceImpl1;
}
@Primary 与您的实现类中的@Component、@Service 或@Repository 注释一起,在这种情况下,默认情况下会注入此实现。
如果您使用@Autowired 标记某个接口类型的列表,则该接口的所有可用实现都将被注入。
@Autowired
public List<MyService> allAvailableImplementations;