Конструктор отлично работает с @Autowired и без него

#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