【发布时间】:2020-10-24 16:14:29
【问题描述】:
我有以下来自 Spring 框架项目的 groovy 代码:
import org.springframework.oxm.Unmarshaller
public class ItemSearchService {
Unmarshaller unmarshaller;
public ItemSearchResponse getObject(InputStream xml) {
ItemSearchResponse its = null;
try {
its = (ItemSearchResponse) unmarshaller.unmarshal(new StreamSource(xml));
} finally {
}
return its;
}
}
Unmarshaller.unmarshall 实际上是接口方法: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/oxm/Unmarshaller.html
Unmarshaller 接口由多个类实现。
谁决定在运行时注入哪个实现类以及它如何决定使用哪个类?
Spring IoC 机制能做到这一点吗?如果是这样,它是在生成 jar 时在构建时选择一个特定的实现类,还是在运行时选择一个特定的实现类?
还有如何知道它实际使用的是哪个实现类?
假设类路径中有依赖的 jar,上述代码是否可以在 Spring 之外的普通 Java 文件中工作?
【问题讨论】:
-
你确定这是一个 Groovy 类?它是有效的,但它非常符合 Java 风格。对于您的一般问题,它可能使用 setter 注入,是的,Spring 容器将确定要提供的特定对象,但我希望看到
@Autowired用于基于 setter 的属性。跨度> -
是的,它来自基于 Spring 的 Grails 项目的 groovy 类。