첫 번째, 자바 클래스 파일에 객체를 생성하고 직접 주입까지 진행해보자.
참고로, 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 설정은 객체를 생성할 때 해당 클래스를 찾아가기 때문에 생성자를 통한 자동 주입이 가능하다.
'SPRING' 카테고리의 다른 글
Java 설정 파일 + XML 설정 파일 함께 사용하기 (0) | 2020.09.22 |
---|---|
Java 설정 파일 쪼개기 - @Import (0) | 2020.09.22 |
직접 의존 주입 <property> <constructor-args> (0) | 2020.09.18 |
의존 자동 주입 @Autowired @Qualified @Resource (0) | 2020.09.18 |
스프링 객체 생성하기 - 싱글톤 패턴 (0) | 2020.09.15 |