본문 바로가기

스프링

스프링 DI-2

앞에서 배운 조립기를 구현한 스프링 조립기 사용

 

클래스에 @Configuration

 

인스턴스 가져올 메서드에 @Bean

 

생성 빈 알아서 가져오는 @Autowired

 

package config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import spring.ChangePasswordService;
import spring.MemberDao;
import spring.MemberRegisterService;

//스프링 설정클래스를 선언하는 어노테이션
//컨테이너 생성 시 설정 된 bean을 생성
@Configuration
public class AppCtx {
	//메서드 이름을 스프링 컨테이너에 저장;
	@Bean
	public MemberDao memberDao() {
		return new MemberDao();
	}
	
	@Bean
	public MemberRegisterService memberRegSvc() {
		return new MemberRegisterService(memberDao());
	}
	
	@Bean
	public ChangePasswordService changePwdSvc() {
		ChangePasswordService pwdSvc = new ChangePasswordService();
		pwdSvc.setMemberDao(memberDao());
		return pwdSvc;
	}
}

 

public class MainForSpring {
	
	private static ApplicationContext ctx = null;
	
	public static void main(String[] args) throws IOException{
		//스프링 컨테이너 생성
		ctx = new AnnotationConfigApplicationContext(AppCtx.class);
 		//코드생략
 	}
    
 	private static void processNewCommand(String[] arg) {
		//위에서 Bean으로 등록한 메서드 호출하여 객체 가져옴(싱글톤이므로 여러개 생성해도 객체는 하나)
		MemberRegisterService regSvc = ctx.getBean("memberRegSvc", MemberRegisterService.class);
        //생략
    }

 

DI 방식

  1. 생성자 방식(생성자에서 객체를 인자로 받음)
  2. 세터 메서드 
    • 메서드 이름이 set으로 시작
    • set뒤에 첫글자는 대문자(camel방식)
    • 파라미터 한 개
    • 리턴 타입 void
  3. 두 방식의 장단점
    • 생성자 : 빈 객체 생성시 완전한 객체 생성/ 파라미터 많을 때 어떤 객체 사용하는지 파악 어려움
    • 설정 메서드(세터) : 세터 이름으로 객체 유추 가능/ 필요한 객체를 전달하지 않아도 객체 생성(nullpointexception)

'스프링' 카테고리의 다른 글

스프링 부트 따라하기-1 (프로젝트 생성)  (0) 2020.11.17
스프링 컴포넌트 스캔  (0) 2020.11.10
스프링 의존자동주입  (0) 2020.11.10
스프링 DI-1  (0) 2020.11.08
스프링 공부 시작  (0) 2020.11.07