의존과 주입에 대해 이해했다면 이제 스프링을 이용해 객체를 조립하고 사용해야 한다.
스프링을 사용하려면 먼저 스프링이 어떠한 객체를 생성하고 , 의존을 어떻게 주입할지를 정의한 설정 정보를 작성해야 한다.
@Configuration
public class Ctx {
@Bean
public MemberDao memberDao() {
return new MemberDao();
}
@Bean
public MemberService service() {
return new MemberService();
}
}
설정 정보에는 @Configuration 이라는 애 너 메이션을 붙이며 스프링 설정 클래스를 의미한다.
@Bean 애노테이션을 붙인 메서드들은 한 개의 빈 객체를 생성한다. 메서드 이름은 각 각의 빈객체의 이름이다.
이제 객체를 생성하고 의존 객체를 주입하는 것은 스프링 컨테이너 이므로 설정 클래스를 이용해 컨테이너를 생성한다.
ApplicationContext 컨테이너를 사용합니다.
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainForSpring {
private static ApplicationContext ctx = null;
public static void main(String[] args) {
ctx = new AnnotationConfigApplicationContext(Ctx.class);
MemberService serivce = ctx.getBean("memberService", MemberService.class);
}
}
AnnotationConfigApplicationContext를 사용해 스프링 컨테이너를 생성합니다. 설정 정보를 넘겨주며
설정 클래스로부터 생성할 객체와 의존 주입 대상을 정합니다.
지금까지는 생성자를 통한 DI방식이었다면 이제는 setter 메서드를 사용하여 객체를 주입해 봅니다.
set과 get메서드를 각각 세터와 게터라고 부르는 애칭도 있으며, 프로퍼티를 이용해 게터 세터를 만 들 경 우 get, set으로 시작하며 첫 글자를 대문자로 변경하는 규칙이 있습니다.
public void setMemberDao(MemberDao memberDao){
this.memberDao = memberDao;
}
이러한 두 방식은 각자의 장점이 존재합니다.
생성자는 빈 객체를 생성하는 시점에 모든 의존 객체가 주입됩니다. 편리한 점이 있지만 만약 생성자의 파라미터 개수가 많은 경우 각 인자가 어떤 의존 객체를 설정하는지 알아내려면 코드 확인이 필요합니다..
setter를 사용한다면 이름을 통해 어떤 의존 객체가 주입되는지 알 수 있습니다. 다만 필요한 의존 객체를 전달하지 않아도 빈 객체가 생성되기 때문에 NullPointerException이 발생할 수 있습니다.
'Spring|Spring-boot' 카테고리의 다른 글
[Spring] 생성자 DI (0) | 2020.06.17 |
---|---|
[Spring] 값 형식 DI (0) | 2020.06.17 |
[spring] 의존 주입 (0) | 2020.06.17 |
[spring] @Configuration (0) | 2020.06.17 |
[Spring] Dependency Injection (xml) (0) | 2020.06.16 |
댓글