2009-11-02 6 views
10
Class A { 

    private B instanceB; 

    @Autowired 
    public setInstanceB(B instanceB) { 
    this.instanceB = instanceB; 
    } 

} 

Powyżej jednej w porównaniu z tą.Jaka jest różnica między wstawianiem @Aemowired do zmiennej i metody?

Class A { 

    @Autowired 
    private B instanceB; 

    public setInstanceB(B instanceB) { 
    this.instanceB = instanceB; 
    } 

} 

Czy zachowanie będzie się różnić w zależności od modyfikatora dostępu?

Odpowiedz

14

Różnica jest seter zostanie wywołana jeśli to gdzie go umieścić, co jest przydatne, gdy robi inne przydatne rzeczy, walidacji itd Zazwyczaj jesteś porównujący:

public class A { 
    private B instanceB; 

    @Autowired 
    public setInstanceB(B instanceB) { 
    this.instanceB = instanceB; 
    } 
} 

vs

public class A { 
    @Autowired 
    private B instanceB; 
} 

(tj. Nie ma ustawiacza).

Pierwsza z nich jest lepsza w tej sytuacji, ponieważ brak setera utrudnia szykanie/testowanie jednostki. Nawet jeśli masz setera, ale uzbroisz członka danych, możesz stworzyć problem, jeśli setter zrobi coś innego. Spowoduje to unieważnienie testów jednostkowych.

Powiązane problemy