본문 바로가기

개발/Spring

의존성 2 in Spring

스프링에서의 의존성 주입

지난 글에서 보았듯이 Spring에서는 Bean을 활용하여 의존성을 주입했다.

예를 다시 한번 되짚어 보자.

xml에서 bean태그에 KoreaTire, AmericaTire클래스 이름과 id로 명시를 하였었다.

그 후

public class Driver{

 ApplicationContext context = new FileSystemXmlApplicationContext("xml경로");

 Car car = new Car();
 Tire tire = (Tire) context.getBean("tire");

 car.setTire(tire);

}

 

이런 식으로 의존성을 주입했었다.

여기서 xml의 id = Car에 property를 설정하여 <property name="tire" ref="koreaTire"></property>
코드로 기본 tire의 값을 초기화 해줄 수 있다. (tire는 Car클래스의 필드이다.)

 

 

 

 

@Autowired를 통한 GET,SET 간편화

Car 클래스를 보면 tire 필드가 있고, 그에 따른 getter/setter가 있다.

이 긴 코드를 @Autowired로 대체할 수 있게 만들었다.

 

우선 xml에서 몇 가지 코드를 추가한다.

그리고 Car클래스에서는 getter/setter 대신에

@Autowired

Tire tire;

이 두 줄로 대체한다.

그리고 나서 xml의   <property name="tire" ref="koreaTire"></property> <- 이 부분도 삭제해도 된다.

 

이를 정리하자면, xml에 Autowired 어노테이션을 사용할 수 있게 설정한 후, Car 클래스에서 @Autowired필드를 선언한다.

@Autowired를 통해 게터세터와 bean에서 Car클래스의 기본 필드가 알아서 설정된다.

여기서 Car의 기본 필드가 어떻게 Auto로 설정되냐고 한다면 xml에서 KoreaTire클래스의 id를 Car클래스 필드와 동일하게 tire로 설정해주면 알아서 찾아준다.

 

하지만 만약 Tire가 하나라면 굳이 id를 설정해주지 않아도 된다. 왜냐하면 Tire를 상속하고 잇는 것이 AmericaTire밖에 없어지면 Auto가 이놈이 Tire필드에 해당하는 놈이구나 하고 알아서 초기설정을 해준다.

 

이 과정을 정리한 말로 표현한다면,

Spring은 type 기준 매핑을 먼저 한 후, 같은 type을 구현한 여러 개의 클래스가 있다면 그 때 bean id로 구분해서 매핑을 하게 된다.

 

그리고 추후에 @Resource라는 어노테이션이 나온다. @Autowird와 아예 똑같고 이름만 다르다.

@Resource(name = "tire1")

Tire tire;

 

이걸 @Autowird로 표현하면

 

@Autowird

@Qualifier("tire1")

Tire tire;

 

두개 완전히 같은 말이다.

 

이런 식으로 코드에서 지정해줄 수도 있다.

이러면 xml에서 id 값이 tire1, tire2로 되어 있어도 알아서 찾아준다.

 

 

 

 

 

 

'개발 > Spring' 카테고리의 다른 글

[Spring] 인프런 8차 Event  (0) 2020.12.25
[Spring] 인프런 3차 강의  (0) 2020.12.24
[Spring] 인프런 2차 강의  (0) 2020.12.24
IoC 컨테이너란?  (0) 2020.12.23
의존성이란  (0) 2020.11.02