java - @Autowired 对象始终为空
问题描述
我已经开始使用 spring data elasticsearch 并且一直在查看这里的示例。
我无法理解如何@Autowired
工作。考虑以下:
IMessageProcessor.java:
package message.processor;
public interface IMessageProcessor {
void processMessage();
}
MyMessageProcessor.java
package message.processor;
@Component
public class MyMessageProcessor implements IMessageProcessor {
@Autowired
private ArticleServiceImpl articleService;
private final Author johnSmith = new Author("John Smith");
private final Author johnDoe = new Author("John Doe");
@Override
public void processMessage() {
Article article = new Article("Spring Data Elasticsearch");
article.setAuthors(asList(johnSmith, johnDoe));
article.setTags("elasticsearch", "spring data");
articleService.save(article);
}
}
MyMessageProcessorIT.java
package message.processor;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class MyMessageProcessorIT {
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Before
public void before() {
elasticsearchTemplate.deleteIndex(Article.class);
elasticsearchTemplate.createIndex(Article.class);
}
@Test
void testProcessMessage() {
MyMessageProcessor msgProcessor = new MyMessageProcessor();
msgProcessor.processMessage();
}
}
每当我运行单元测试时,articleService
inMyMessageProcessor
总是null
. 我需要额外的配置才能使自动装配工作吗?所有其他代码与上面链接的 github 存储库中的相同。
如何确保在我需要使用的项目中的任何地方ArticleServiceImpl
都正确地自动连接?
我似乎有过同样问题的其他帖子,但似乎没有一个解决方案适用于我下面的示例。
解决方案
您没有使用 Spring 创建的 MyMessageProcessor 实例并在此行上创建自己的实例。
MyMessageProcessor msgProcessor = new MyMessageProcessor();
您应该改为在测试类中自动装配 MyMessageProcessor。
推荐阅读
- python-3.x - python的except块可以同时有2个条件吗?
- javascript - 如何从对象数组中渲染所有未知属性,除了一些反应
- javascript - 网站支持页面中的 HTML 中的 JavaScript 代码
- bash - 在 bash 脚本中的函数内部读取 -p
- visual-studio - 调试器未正确安装 SSIS 2019
- c++ - 组成情况下的班级规模
- github - 如何从 Visual Studio 将代码推送到其他人的存储库
- c++ - 无法使用 Apple Silicon 上的 Boost.Test 在 cmake 项目中构建测试套件
- iphone - 在 ScrollView ->Flat-List ->map 仅适用于 iPhone 6s 中使用时,可触摸组件在 ReactNative 中不起作用
- sql - Oracle 12c - SQL 根据主记录和详细记录比较多行