此问题在此处已有答案:
Why is my Spring @Autowired field null?(21个回答)
4年前关闭。
我已经开始使用spring data elasticsearch,并一直在研究here示例。
我无法理解@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();
}
}
型
每当我运行单元测试时,MyMessageProcessor
中的articleService
总是null
。我需要额外的配置才能使自动装配工作吗?所有其他代码与上面链接的github repo中的代码相同。
如何确保在项目中需要使用ArticleServiceImpl
的任何地方都正确地自动连接?
我看过其他有同样问题的帖子,但没有一个解决方案似乎对我下面的例子有效。
3条答案
按热度按时间hxzsmxv21#
您没有使用Spring创建的MyMessageProcessor示例,而是在这一行创建了自己的示例。
字符串
您应该在测试类中自动连接MyMessageProcessor。
w1e3prcc2#
@PCL,你的帖子中的第一个评论链接提供了完整的答案,但在你的代码中,你有两个选择:1 -把
MyMessageProcessor msgProcessor
自动连接:字符串
或者,你获取应用程序上下文并手动自动连接bean,在@Tom提供的链接中,你可以看到这样引用的链接有手动bean查找。如果你想创建一个新的bean,那么applicationContext也有一个autowire方法。
最好的问候,大卫
pbgvytdp3#
原因是你不允许spring来管理你的类MyMessageProcessor,所以spring不会注入你的ArticleServiceImpl,请按照这些步骤操作
public class String {
字符串