java - 接口(interface)的Spring依赖注入(inject)

标签 java spring interface dependency-injection

嗯,我一直在看一些关于Spring依赖注入(inject)和MVC的教程,但我似乎仍然不明白我们如何具体实例化类?

我的意思是,例如我有一个变量

@Autowired
ClassA someObject;

我如何让 spring 创建 someObject 作为 ClassB 的实例来扩展 ClassA?像 someObject = new ClassB();

我真的不明白它在 spring 中是如何工作的,ContextLoaderListener 是自动执行的,还是我们必须创建某种配置类,在其中我们确切指定 spring 应该将这些类实例化为什么? (在这种情况下,我在教程中的任何地方都没有看到)如果是,那么我们如何指定以及它看起来如何?我们如何配置它以在 web.xml 等中工作?

最佳答案

你可以这样做:

接口(interface):

package org.better.place

public interface SuperDuperInterface{
    public void saveWorld();
}

实现:

package org.better.place

import org.springframework.stereotype

@Component
public class SuperDuperClass implements SuperDuperInterface{
     public void saveWorld(){
          System.out.println("Done");
     }
}

客户:

package org.better.place

import org.springframework.beans.factory.annotation.Autowire;

public class SuperDuperService{
       @Autowire
       private SuperDuperInterface superDuper;


       public void doIt(){
           superDuper.saveWorld();
       }

}

现在您已经定义了接口(interface),编写了实现并将其标记为组件 - docs here .现在唯一剩下的就是告诉 spring 在哪里可以找到组件,以便它们可以用于 Autowiring 。

<beans ...>

     <context:component-scan base-package="org.better.place"/>

</beans>

关于java - 接口(interface)的Spring依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13815139/

相关文章:

java - 平铺 map 加载问题

java - 保存图像的正确位置(spring/jelastic)

go - 这个接口(interface)和私有(private)数据类型模式的概念是什么

c# - 通用类型父列表不接受子类型是父列表类型的子类型

java - 在 Java11 模块中使用 @PostConstruct 或 @PreDestroy

java - PrimeFaces GMap 忽略模型标签,不显示标记

java - jBPM 5.4 与 Tomcat 7 和 MySQL

java - Spring Web Security 中的自定义方法

java - 带有自定义 isLoggedIn 参数的 Spring RequestMapping

c# - 您可以在 WCF 中将接口(interface)用作 DataMembers 吗?