java - 调用由公共接口定义的方法?
问题描述
我在理解这段代码时遇到了一些麻烦。内容变量是一个接口。我无法理解如何直接在另一个类未实现的接口上调用该方法。我是否缺少一些Java基础知识?还是这与它是自动接线的事实有关?
public class Utils {
@Autowired
private Content cContent;
@TraceMethod
public ConcurrentHashMap<String, String> getCMSContent(Locale locale, String businessId, String appId, String contentType, String contentId) {
CMContent content=null;
try {
content = cContent.getContent(locale.getValue(), businessId, appId, contentType, contentId);
} catch (Exception e) {
LOG.error("Error in content call");
}
...
...
}
界面
public interface Content {
CMContent getContent(String var1, String var2, String var3, String var4, String var5) throws Exception;
}
解决方案
该代码旨在使用依赖注入框架,例如 Spring。
当 Spring 创建 的实例时Utils
,它将在其上下文中找到另一个实现 的对象,并将其Content
分配给cContent
. 这就是@Autowired
注解的意义。
使字段的类型成为接口而不是具体类型允许在不同情况下使用接口的不同实现。例如,可以使用模拟来对Utils
类进行单元测试,或者 Spring 可以使用工厂来创建实现,并根据应用程序的配置方式提供不同的实现。
推荐阅读
- r - 通过 R 中的 grep 进行自由文本分类
- c - 在C中读取文件时字符串的指针数组
- css - 盒子阴影不出现
- python - 将数据拟合到模型中时出现“ValueError: Expected 2D array, got 1D array”
- r - 项目所需的基本 Rscript 帮助
- python - 简单脚本中的大量延迟?
- nlp - 使用 SpaCy 对名称和昵称进行词形还原
- java - Chromedriver 用地址栏中的数据打开浏览器,然后打开另一个应用程序窗口
- flutter - Flutter 将 List tile 导航到列表详细信息页面
- swift - 请问如何监控 AVMIDIPlayer 的 currentPosition?