我以前和legacy Spring合作过。我们通过xml配置定义了bean,并手动连接它们。我的团队最终做出了一致的努力来更新注释,并使用Spring Boot而不是Spring MVC的‘传统’方法。
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();
}
}
最常见的方法是使用@autowired
注释。另外,因为您有coach
接口的两个不同实现,所以您应该使用@qualifier
注释来告诉Spring要注入哪个接口实现。
关于这两个注释的一些教程,让您开始:
对于您的示例,要将bean注入到您的控制器中,您应该执行以下操作:
@RestController
class MyController {
@Autowired
@Qualifier("soccerCoach")
private Coach coach;
@GetMapping("/")
public String sayHello() {
// this should invoke the workout() from SoccerCoach implementation
System.out.println(coach.workout());
return "Time on server is: " + new java.util.Date();
}
}
或者,按照您的意图,使用构造函数注入将SoccerCoach
注入到TennisCoach
中,代码将变成:
@Service
class TennisCoach implements Coach {
private Coach soccerCoach;
@Autowired
public TennisCoach(@Qualifier("soccerCoach") Coach soccerCoach) {
this.soccerCoach = soccerCoach;
}
public Coach getCoach() {
System.out.println(soccerCoach.getClass());
return soccerCoach;
}
}
@Component
public class AnyComponent {
@Autowired
private ApplicationContext applicationContext;
public void invokeCoach() {
System.out.println(applicationContext.getBean("tennisCoach"));
System.out.println(applicationContext.getBean(SoccerCoach.class));
}
}
@RestController
class MyController {
@Autowired
private AnyComponent anyComponent;
@GetMapping("/")
public String sayHello() {
anyComponent.invokeCoach();
return "Time on server is: " + new java.util.Date();
}
}
网址:https://www.baeldung.com/spring-autowire:
从Spring2.5开始,框架引入了一种由@Autowired注释驱动的新样式的依赖注入。这个注释允许Spring解析协作bean并将其注入到bean中。
我使用Spring的引导2.6.3和我试图使用thymeleaf最近得到一个与html的确认消息后,我通过邮件确认我的帐户(我只是使用确认邮件来验证新帐户),所以我看了一些关于thymeleaf的视频,我标记所有的视频都有一个名为模板的文件夹和静态在src/main/ressource和我没有他们,所以我创建了一个名为模板的文件夹,在文件夹中我创建了一个html文件只是为了尝试它,如果它(html
我是Springboot的初学者,所以决定在购物车上工作。似乎找不到org.springframework.expression.spel.SpelEvalue ationException: EL1007E的根:在null上找不到属性或字段'name'。嵌套异常是org.thymeleaf.exceptions.TemplateProcessingException: Exception评估Sp
我想在我的Junit5单元测试中将值注入到带有@Value注释的私有字段。 我引用了这个,并使用了ReflectionTestUtils。setField通过注入值解决了我的问题,但在验证方法被调用的次数时失败。 MyClass(我的类别): 测试类: 运行上述测试时出错 我想kafkaTemplate.sendMessage();被调用一次,但被调用两次后添加反射TestUtils。 需要关于如
我是Spring boot和tomcat的初学者,我发现了这个问题: 在tomcat服务器上部署Spring Bootwar文件时,如果要添加静态索引,就会出现问题。html与它并肩作战。 为了使它能够部署为war,我在我的应用程序类中添加了以下内容: 现在应用程序工作,但index.html(它位于src/main/资源下)将不显示(IM获得Whitelabel错误页与有一个意外的错误(type
我想在我的spring boot项目中使用Kafka Streams实时处理。所以我需要Kafka Streams配置,或者我想使用KStreams或KTable,但我在互联网上找不到示例。 我做了制作人和消费者现在我想流实时。
问题内容: 更新:添加Maven依赖关系 * 更新:通过添加 Maven依赖关系 解决了该错误* 美好的一天。我有AplicationContext.xml的这一部分 Maven Dep春季和冬眠 但是,当我启动我的应用程序时,它告诉我这个错误 但是我正在使用hibernate4。这是什么魔术?=)我已经尝试过重新部署应用程序,但是结果是一样的 问题答案: 您已经错过了Spring-ORM模块: