spring framework에서 사용할 수 있는 어노테이션은 많다.
차차 공부하면서 알아보자.
이번에 공부할 어노테이션은 @Autowired 이다.
이 어노테이션은 설정 xml 파일에서 생성된 객체의 값을 setting 할 때 사용하는 <property></property> 태그의 역할을 하는 어노테이션이다.
<property name="exam" ref="exam"/>
위의 태그의 역할은 exam이라는 객체를 참조하여 해당 객체의 값으로 setting해라 이다.
@Autowired
@Override
public void setExam(Exam exam) {
this.exam=exam;
}
위와 같이 @Autowired 어노테이션을 사용하면 동일한 결과를 property 태그를 지워도 동일한 결과를 얻을 수 있다.
위 어노테이션을 사용하려면 설정 xml에 다음과 같은 설정이 필요하다.

1. 위의 context 체크

2. 설정 xml 위쪽에 <context:anntation-config /> 입력
하지만 위의 @Autowired가 어떤 것을 기준으로 바인딩을 해줄까?
Autowired 어노테이션은 타입을 기준으로 바인딩을 한다.
만약 동일한 타입의 객체가 컨테이너에 두개가 있다면 어떻게 해야할까
Qualifire 어노테이션은 사용할 의존 객체를 선택할 수 있도록 해준다.
만약 <bean>의 id를 다른 것을 사용한다면 @Qualifier() 어노테이션을 통해 해당 id를 지정한다면 그 id를 통해 Autowired를 해준다.
@Configuration
public class AppCtx {
@Bean
@Qualifier("printer")
public MemberPrinter memberPrinter1(){
return new MemberPrinter();
}
@Bean
public MemberPrinter memberPrinter2(){
return new MemberPrinter();
}
}
위 코드를 보면 동일한 클래스 명의 객체를 반환하는데 두 객체는 엄연히 다른 객체이다. 하지만 스프링 컨테이너는 Bean 객체의 이름을 클래스이름에서 첫 글자를 소문자로 바꿔서 저장하는데 Qualifier는 이 저장하는 이름을 지정할 수 있게 해준다.
여기서 중요한 것은 Qualifier로 지정해준 객체를 주입하려는 setter 메소드나 함수에서도 Qualifier을 이용하여 이름을 지정해줘야한다.
@Autowired은 3가지 위치에 입력이 가능하다.
"필드에 하는 방법"

"생성자에 하는 방법"

"setter에 하는 방법"

Autowired는 늘 True이기 때문에 만약 일치하는 id가 없다면 무조건 오류가난다. 하지만 오류를 무시하고 다른 코드를 실행시키겠다면 required 옵션을 false로 지정하여 코드를 진행시킬 수 있다.
설정 xml 파일에
<context:component-scan base-package="패키지경로"/>
태그를 작성해주면 지정된 패키지 안에 있는 클래스의 어노테이션을 분석할 수 있도록 지정한다.
위의 태그를 작성하면 기존에 작성하였던
<context:anntation-config />
태그 또한 필요가 없어진다.

그리고 확인해야할 클래스가 두개 이상이라면 위 사진처럼 컴마로 띄우고 해당 패키지 명을 작성하면된다.
그리고 main에서 객체를 xml에서 연결하는 방법은 클래스 변수 이름으로 연결하는 방법과 클래스 그 자체의 이름으로 연결하는 두 가지 방법이 있었다.
만약 클래스 변수 이름으로 연결하려면 아래와 같이
@Component("변수이름")
같이 설정해 주어야한다.
"적용가능한 어노테이션"

위의 어노테이션은 Component의 기능을하지만 용도?가 지금 범위에서는 쓰지 않기에 뒤에가서 자세하게 배울것이다.
----------------------------@Component추가--------------------------------
개발자가 직접 작성한 클래스를 Bean으로 만드는 것이다. 기본은 싱글톤 클래스 빈을 생성하고 @Scope 설정을 통해 싱글톤이 아닌 방식으로도 생성이 가능하다.
<오늘 하루>
오늘은 공부가 잘 되지 않았다. 공부가 잘되는 날도 있을 것이고 안되는 날도 있을거지만 포기하지말고 꾸준하게 해나가자.
2022-07-22