#java #spring #javabeans
#java #весна #javabeans
Вопрос:
У меня есть tennisCoach
объект, созданный Spring framework:
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml") ;
Coach theCoach = context.getBean("tennisCoach", Coach.class);
Не могу понять, зачем мне нужны @Autowired
аннотации в TennisCoach
конструкторе в приведенном ниже коде. Он отлично работает с @Autowired
аннотацией и без нее.
@Component
public class TennisCoach implements Coach {
private FortuneService fortuneService;
@Autowired
public TennisCoach(FortuneService theFortuneService) {
fortuneService = theFortuneService;
}
@Override
public String getDailyWorkout() {
return "Practice your backhand volley";
}
@Override
public String getDailyFortune() {
return fortuneService.getFortune();
}
}
UPD
Содержимое applicationContext.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.luv2code.springdemo"></context:component-scan>
</beans>
Ответ №1:
Из @Autowired
Javadoc:
If a class only declares a single constructor to begin with, it will always be used, even if not annotated.
Начиная с Spring 4.3, вам не нужна @Autowired
аннотация, как только у вас есть единственный конструктор в вашем классе.
Ответ №2:
Здесь @Autowired используется для внедрения конструктора. TennisCoach зависит от FortuneService и вводится через constructor . Я не уверен, как вы настроили компоненты в applicationContext.xml
Комментарии:
1. Я добавил applicationContext.xml в вопросе тела UPD