앞에서 배운 조립기를 구현한 스프링 조립기 사용
클래스에 @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 방식
- 생성자 방식(생성자에서 객체를 인자로 받음)
- 세터 메서드
- 메서드 이름이 set으로 시작
- set뒤에 첫글자는 대문자(camel방식)
- 파라미터 한 개
- 리턴 타입 void
- 두 방식의 장단점
- 생성자 : 빈 객체 생성시 완전한 객체 생성/ 파라미터 많을 때 어떤 객체 사용하는지 파악 어려움
- 설정 메서드(세터) : 세터 이름으로 객체 유추 가능/ 필요한 객체를 전달하지 않아도 객체 생성(nullpointexception)
'스프링' 카테고리의 다른 글
스프링 부트 따라하기-1 (프로젝트 생성) (0) | 2020.11.17 |
---|---|
스프링 컴포넌트 스캔 (0) | 2020.11.10 |
스프링 의존자동주입 (0) | 2020.11.10 |
스프링 DI-1 (0) | 2020.11.08 |
스프링 공부 시작 (0) | 2020.11.07 |