Spring - @Autowired의 위치와 Required 옵션

jodbsgh·2022년 4월 1일
0

🍕"Spring"

목록 보기
8/19

@Autowired 에너테이션을 기본생성자에서 사용

public class InlineExamConsole implements ExamConsole
{
	@Autowired			//기본생성자를 생성하면서 객체를 생성할 수 있음.
	@Qualifier("exam1")
    private Exam exam;
    
     public InlineExamConsole()
    {
    	System.out.println("constructor");
    }
    
   	public InlineExamConsole(Exam exam)
    {
    	System.out.println("overloaded constructor");
        this.exam = exam;
    }
    
	@Override
    public void print()
    {
    	if(exam == null)
        	System.out.println("xml파일에 객체가 존재하지 않음");
       	else
        	System.out.println("xml파일에 객체가 존재함");
    }
    
   	
    pyblic void setExam(Exam exam)
    {
    	System.out.println("setter");
    	this.exam = exam;
    }
}

이와 같은 방법은 기본생성자가 없을 시 오류가 발생함으로 주의해야 한다.

xml에 객체가 없는 경우

public class InlineExamConsole implements ExamConsole
{
	@Autowired(required = false)	//객체가 없어도 ok, 오류방지
	@Qualifier("exam1")				//exam1 객체가 xml파일에 존재하지 않는상태
    private Exam exam;
    
     public InlineExamConsole()
    {
    	System.out.println("constructor");
    }
    
   	public InlineExamConsole(Exam exam)
    {
    	System.out.println("overloaded constructor");
        this.exam = exam;
    }
    
    @Override
    public void print()
    {
    	if(exam == null)
        	System.out.println("xml파일에 객체가 존재하지 않음");
       	else
        	System.out.println("xml파일에 객체가 존재함");
    }
    
   	
    pyblic void setExam(Exam exam)
    {
    	System.out.println("setter");
    	this.exam = exam;
    }
}

이 경우에도 "@Autowired(required = false)" 를 사용했기 때문에 오류없이 코드를 실행시킬 수 있다.

profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글