接口的Springdependency injection
好吧,我一直在看一些关于Springdependency injection以及MVC的教程,但我似乎还不明白我们如何才能具体实例化类?
我的意思是,例如,我有一个变量
@Autowired ClassA someObject;
我如何使spring创建someObject作为ClassB的实例,它将扩展ClassA? 像someObject = new ClassB();
我真的不明白它在Spring中是如何工作的,ContextLoaderListener是自动完成它还是我们必须创建某种配置类,我们确切地指定spring应该将这些类实例化为什么? (在这种情况下,我没有在教程中的任何地方看到过)如果是,那么我们如何指定它们是什么样的? 我们如何配置它在web.xml等工作?
你可以这样做:
接口:
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(); } }
现在您已经定义了接口,编写了一个实现并将其标记为组件 – 这里是docs 。 现在唯一剩下的就是告诉spring哪里可以找到组件,这样它们就可以用于自动assembly。
您必须在applicationContext.xml文件中指定要创建对象的类的类型,或者如果您使用的是最新版本的Spring,则可以使用@Repository
@Component
, @Service
@Repository
或@Repository
任何一个直接注释该类。 在web.xml中,如果使用基于xml的配置,则必须将xml文件的路径指定为servlet的上下文参数。
是的,您必须提供一个context.xml文件,您可以在其中指定实例。 将它提供给ApplicationContext,它将为您自动assembly所有字段。
http://alvinalexander.com/blog/post/java/load-spring-application-context-file-java-swing-application