본문 바로가기

SPRING

Java 설정 파일 - 직접 주입 / 자동 주입 어노테이션

첫 번째, 자바 클래스 파일에 객체를 생성하고 직접 주입까지 진행해보자.

 

참고로, xml에서 이렇게 진행하던 방식을 자바 클래스 파일로 어떻게 표현하는지 확인해보자.

 

// 객체 생성
<bean id="memberDao" class="spring.MemberDAO"/> 
	
// 객체 생성 및 주입
<bean id="memberInfoPrinter" class="spring.MemberInfoPrinter">
	<property name="memberDao" ref="memberDao" />
	<property name="memberPrinter" ref="memberPrinter" />
</bean>

 

 

@Configuration

xml 설정 대신에 자바 클래스 파일에 빈 설정을 할 때, 그 클래스 위에 붙이는 어노테이션

 

@Bean

자바 클래스 파일에서 생성하고자 하는 객체 위에 붙이는 어노테이션

 

 


두 번째, 자바 클래스 파일에 객체를 생성하고 자동 주입까지 진행해보자.

 

자동 주입은 @Autowired 어노테이션을 사용했던 것 기억하지? 

이런 식으로 xml에서는 객체 생성만 하고, 주입은 하지 않은 것을 확인. 이걸 자바 에서는 어떻게 표현할까?

 

// 자동 주입을 해주는 클래스 파일의 @Autowired를 읽기 위한 태그
<context:annotation-config/>

// 객체 생성
<bean id="memberDao" class="spring.MemberDAO"/> 
	
// 객체 생성
<bean id="memberInfoPrinter" class="spring.MemberInfoPrinter"/>

 

* xml과 다른 한 가지 주의사항

xml 설정에서 @Autowired 어노테이션은 생성자, 필드, 메소드에서 사용 가능했다.

하지만 자바 설정에서는 @Autowired 어노테이션이 붙은 필드, 메소드에는 자동 주입이 발생하지만

생성자에는 @Autowired  어노테이션을  붙여도 자동주입이 발생하지 않는다.

 

왜 자바 설정에서는 되지 않을까?

자바 설정을 사용할 때는 스프링 컨테이너가 객체를 생성할 때 사용할 생성자를 결정할 수 없고,

따라서 생성자를 통한 의존 객체 자동 주입을 적용할 수 없는 것이다.

XML 설정은 객체를 생성할 때 해당 클래스를 찾아가기 때문에 생성자를 통한 자동 주입이 가능하다.