我是一个初学者与Spring。我目前正在尝试运行一个非常简单的项目,只是为了开始学习Spring并理解IoC和依赖注入。起初我创建了一个简单的Sping Boot 项目,它工作正常,但现在我试图在没有引导的情况下完成它,因为我想更好地了解发生了什么。我不知道该怎么做(下面的完整类):SpringApplication.run(TestSpringApplication.class, args);
我试着这样做:
TestSpringApplication app = new TestSpringApplication();
app.run(args);
但是在run()方法中,@Autowired messageRepository为null。我猜这是因为我使用new而不是applicationContext.getBean()创建了TestSpringApplication?但是如何在静态main方法中访问/获取applicationContext呢?
原谅我,如果它可能听起来微不足道,我几乎从零开始在这里,我有一个很难找到容易的教程。
以下是我正在尝试做的,但没有工作:
package com.cypherf;
import com.cypherf.model.Message;
import com.cypherf.repository.MessageRepository;
import com.cypherf.service.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
public class TestSpringApplication {
@Autowired
private ApplicationContext context;
@Autowired
private MessageRepository messageRepository;
@Autowired
private MessageService messageService;
public static void main(String[] args) {
TestSpringApplication app = new TestSpringApplication();
app.run(args);
}
public void run(String... args) {
messageRepository.save(new Message("Message one"));
messageRepository.save(new Message("Message two"));
messageRepository.save(new Message("Message two"));
messageService.printAllMessages();
}
}
这是我以前的Sping Boot 类,它正在工作:
package com.cypherf;
import com.cypherf.model.Message;
import com.cypherf.repository.MessageRepository;
import com.cypherf.service.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TestSpringApplication implements CommandLineRunner {
@Autowired
private MessageRepository messageRepository;
@Autowired
private MessageService messageService;
public static void main(String[] args) {
SpringApplication.run(TestSpringApplication.class, args);
}
public void run(String... args) throws Exception {
messageRepository.save(new Message("Message one"));
messageRepository.save(new Message("Message two"));
messageRepository.save(new Message("Message two"));
messageService.printAllMessages();
}
}
1条答案
按热度按时间a6b3iqyw1#
如果你没有使用Sping Boot ,那么你必须通过创建一个
ApplicationContext
bean来自己设置Spring容器。一种方法是使用
AnnotationConfigApplicationContext
类。举例来说:但这只是为您创建了一个基本的应用程序上下文。如果没有Sping Boot ,您将无法再访问自动配置。这意味着:
DataSource
bean。EntityManagerFactory
bean和TransactionManager
(并且还必须配置Spring Data JPA)。printAllMessages()
依赖于一个日志框架,那么您现在还必须自己配置这个框架。此外,像
CommandLineRunner
这样的类也不再可用。现在你不得不依靠其他选择,比如听ContextRefreshedEvent
。