@Autowired의 위치에 따른 Injection 차이
package com.ssafy.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class GridExamConsole implements ExamConsole {
@Autowired
@Qualifier("exam1")
private Exam exam;
public GridExamConsole() {}
public GridExamConsole(Exam exam) {
this.exam = exam
}
@Override
public void print() {
System.out.println(" ___________________");
System.out.println("| total | avg | ");
System.out.println(" ___________________");
System.out.printf("| %3d | %3.2f|\n", exam.total(), exam.avg());
System.out.println(" ___________________");
}
@Autowired
@Qualifier("exam1")
@Override
public void setExam(Exam exam) {
this.exam = exam;
}
}
Overloadding 생성자에 @Autowired가 붙은 경우
package com.ssafy.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class GridExamConsole implements ExamConsole {
private Exam exam;
public GridExamConsole() {}
@Autowired
@Qualifier("exam1")
public GridExamConsole(
@Qualifier("exam1") Exam exam1
) {
this.exam = exam
}
@Override
public void print() {
System.out.println(" ___________________");
System.out.println("| total | avg | ");
System.out.println(" ___________________");
System.out.printf("| %3d | %3.2f|\n", exam.total(), exam.avg());
System.out.println(" ___________________");
}
@Override
public void setExam(Exam exam) {
this.exam = exam;
}
}
Q. @Autowired 선언되어 있으나, 객체가 없는 경우 에러가 발생한다. 이럴때 null을 처리해 줄 수는 없을까?
A. 이때 사용할수 있는 @Autowired(required = false) 옵션을 통해 기본값 설정이 가능하다.
@Component
public class GridExamConsole implements ExamConsole {
@Autowired(required = false)
@Qualifier("exam1")
private Exam exam;
public GridExamConsole() {}
public GridExamConsole(Exam exam1) {
this.exam = exam
}
@Override
public void print() {
if(exam == null)
system.out.println();
else
system.out.println();
}
@Override
public void setExam(Exam exam) {
this.exam = exam;
}
}