Java 从接口扩展的单例类的依赖项注入

Java 从接口扩展的单例类的依赖项注入,java,spring,Java,Spring,我有一个单例类readingstrategyimp,它从接口ReadingStrategy扩展而来。在readingStrategyImp-getInstance()中,方法将返回readingStrategyImp的实例 我的问题是: 我想在项目的其他几个类中注入ReadingStrategyImp的依赖关系。 我通过下面的代码实现了这一点 ReadingStrategy readingStrategy; @Autowired public void setReadi

我有一个单例类
readingstrategyimp
,它从接口
ReadingStrategy
扩展而来。在
readingStrategyImp-getInstance()
中,方法将返回
readingStrategyImp
的实例

我的问题是: 我想在项目的其他几个类中注入
ReadingStrategyImp
的依赖关系。 我通过下面的代码实现了这一点

    ReadingStrategy readingStrategy;

    @Autowired
    public void setReadingStrategy(ReadingStrategyImp readingStrategy) {
        this.readingStrategy = ReadingStrategyImp.getInstance();
    }
我想知道如何注入依赖项。

您只需执行以下操作:

@Component
public class Sample {

  // spring will automatically find the implementation class and inject it. 
  // so, the ReadingStrategyImp class will automatically injected. 
  @Autowired 
  @Qualifier("readingStrategyImp")
  private ReadingStrategy readingStrategy;

}

仅此而已。

如果我正确理解您的问题,您应该首先使用ReadingStrategyImp创建一个用于ReadingStrategy的Bean:

@Bean
public ReadingStrategy readingStrategy() {
   return ReadingStrategyImp.getInstance();
}
然后你可以在需要的地方自动连接阅读策略

@Autowired ReadingStrategy readingStrategy;

依赖接口而不是具体的类总是更好的。

如果有两个类实现了ReadingStrategy,我希望实现的类有单独的实例。这如何有助于实现同样的目标?@RiaSachdeva您必须使用
@Qualifier
。告诉我你必须注入的类名。我将编辑我的答案。我尝试了该答案,但如果该类是单例,则该答案无效。我可以注入依赖项,但我希望访问与该类是单例相同的实例。这里的问题是,每次我自动连接它时,都会创建该bean的新实例。将用程序结构和结果编辑代码。@RiaSachdeva No!!自动关联时,不会创建新实例。在IOC容器中,bean是在启动时创建的,这些bean本质上是单例的。因此,您只注入单例bean。