Spring Boot - @Autowired - problem z wstrzyknięciem

0

Klasa startowa:

public static void main(String[] args) {
		SpringApplication.run(SpringtestApplication.class, args);

		@Autowired
		ClassA classA;

		@Autowired
		ClassB classB;

    	       classB.show();
}

Klasa A

@Component
public class ClassA {

    public void show(){
        System.out.println("ClassA");
    }
}

Klasa B
@Component
public class ClassB {

public void show(){
    System.out.println("ClassB");
}

public ClassB(ClassA a){
    a.show();
}

}

Problem:
Error:(16, 17) java: annotation type not applicable to this kind of declaration

Co chce uzyskać: wg mnie powinien uzyskać w konsoli wynik:
ClassA
ClassB
ponieważ, pierw wstrzykujemy do konstruktora ClassB, gdzie jest uruchamiane a.show().

Pytania:

  1. czy mój to rozumowania jest ok ?
  2. gdzie leży problem i dlaczego ?
  3. czy kod z adnotacją @Autowired będzie działał dokładnie tak samo, jak:
//		ClassA classA = new ClassA();
//		ClassB classB = new ClassB(classA);
//		classB.show();
1

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/Autowired.html
Hmm nigdzie nie widzę żeby @ Autowired miało target LOCAL_VARIABLE
Polecam najpierw
1)Nauczyć się Javy
2)Poczytac dokumentacje

5

Boy, wstrzykujesz do pól, a nie do zmiennnych w metodzie... Zawołaj mnie innym razem.

0

Rozumiem, chciałeś uruchomić spring application najkrótszym możliwym kodem. Ale jednak za krótko. Oprócz statycznej funkcji main musisz mieć jeszcze run w klasie implementującej CommandLineRunner. Spring sam utworzy Ci egzemplarz tej klasy. Może to być osobny Bean, jak w przykładzie, albo nawet wystarczy public class KlasaStartowa implements CommandLineRunner.

1 użytkowników online, w tym zalogowanych: 0, gości: 1