接口的Spring依赖注入

Art*_*s M 8 java spring dependency-injection interface

好吧,我一直在看一些关于Spring依赖注入以及MVC的教程,但我似乎还不明白我们如何才能具体实例化类?

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

@Autowired
ClassA someObject;
Run Code Online (Sandbox Code Playgroud)

我如何使spring创建someObject作为ClassB的实例,它将扩展ClassA?像someObject = new ClassB();

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

Ste*_*fan 25

你可以这样做:

接口:

package org.better.place

public interface SuperDuperInterface{
    public void saveWorld();
}
Run Code Online (Sandbox Code Playgroud)

执行:

package org.better.place

import org.springframework.stereotype

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

客户:

package org.better.place

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

public class SuperDuperService{
       @Autowire
       private SuperDuperInterface superDuper;


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

}
Run Code Online (Sandbox Code Playgroud)

现在您已经定义了接口,编写了一个实现并将其标记为组件 - 这里docs.现在唯一剩下的就是告诉spring哪里可以找到组件,这样它们就可以用于自动装配.

<beans ...>

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

</beans>
Run Code Online (Sandbox Code Playgroud)

  • 很酷,如果我们有多个实现怎么办?您将如何自动装配?因为您在服务级别自动装配了吗?我试图直接自动执行实现,但它失败了.你可以解释吗.提前致谢 ! (5认同)