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。