【发布时间】:2020-06-04 23:34:57
【问题描述】:
我过去曾使用过传统的 Spring。我们通过 xml 配置定义了我们的 bean 并手动连接它们。我的团队终于齐心协力更新注解并使用 Spring Boot 而不是 Spring MVC 的“传统”方法。
话虽如此,我无法弄清楚我是如何在 Boot 中检索 bean 的。在 legacy 中,Spring 要么使用构造函数/setter 注入(取决于我们的配置),要么我们可以直接调用带有 context.getBean("myBeanID"); 的 bean,但现在似乎不再是这种情况了。
我整理了一个小测试用例,尝试在下面的代码中让它工作:
package com.ots;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class GriefUIApplication{
public static void main(String[] args) {
SpringApplication.run(GriefUIApplication.class, args);
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(GriefRecord.class).addAnnotatedClass(RecordId.class)
.addAnnotatedClass(CrossReferenceRecord.class)
.buildSessionFactory();
Statics.setSessionFactory(factory);
TennisCoach tCoach = new TennisCoach();
tCoach.getCoach();
}
}
interface Coach{
public String workout();
}
@Service
class TennisCoach implements Coach{
private Coach soccerCoach;
@Autowired
private ApplicationContext context;
public TennisCoach() {
}
public Coach getCoach() {
System.out.println(context + " IS THE VALUE OF THE CONTEXT OBJECT");
soccerCoach = (SoccerCoach)context.getBean("soccerCoach");
System.out.println(soccerCoach.getClass());
return soccerCoach;
}
@Override
public String workout() {
String practice = "practice your backhand!";
System.out.println(practice);
return practice;
}
}
@Service
class SoccerCoach implements Coach{
public SoccerCoach() {
}
@Override
public String workout() {
String practice = "practice your footwork!";
System.out.println(practice);
return practice;
}
}
@RestController
class MyController{
@GetMapping("/")
public String sayHello() {
return "Time on server is: " + new java.util.Date();
}
}
我尝试将 ApplicationContext 对象自动装配到 TennisCoach 类中。当我运行它时,该对象为空。
我们如何在 Boot 中检索 bean?
【问题讨论】:
标签: java spring-boot javabeans