본문 바로가기
Java/Spring

Spring) Java Annotation을 통한 context 작성 - IoC, DI 특징 파악하기

by 박채니 2022. 8. 12.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


IoC 지원 특징 파악하기

 

@Configuration

- bean 설정에 관련된 class 지정

 

UserConfig

id : 메소드명 (userController, userService)

class : 리턴타입

@Configuration
public class UserConfig {
	@Bean
	public UserController userController() {
		return new UserController();
	}
	
	@Bean
	public UserService userService() {
		return new UserServiceImpl();
	}
}

@Scope, @Lazy 등의 어노테이션을 통해 옵션도 설정 가능!

 

UserController

public class UserController {
	private UserService userService;
		
	public String findNameById(String id) {
		String name = userService.findNameById(id);
		return "사용자 이름 : " + name;
	}
}

 

UserService interface

public interface UserService {

	String findNameById(String id);

}

 

UserServiceImpl

public class UserServiceImpl implements UserService {
	
	public String findNameById(String id) {
		if("honggd".equals(id)) {
			return "홍길동";
		} 
		return null;	
	}
}

 

UserMain

public class UserMain {

	public static void main(String[] args) {
		ApplicationContext context = new AnnotationConfigApplicationContext(UserConfig.class);
		System.out.println("================ spring container 초기화 완료 ================");
	}

}

@콘솔출력값
UserController 객체 생성!
UserService 객체 생성!
================ spring container 초기화 완료 ================

UserConfig에서 @Bean으로 등록한 객체들이 spring container 초기화 시 생성되는 것을 확인할 수 있습니다.

 


DI 특징 파악하기

 

UserConfig

@Configuration
public class UserConfig {
	@Bean
	public UserController userController() {
		System.out.println("UserController 객체 생성!");
		return new UserController(userService());
	}
	
	@Bean
	public UserService userService() {
		System.out.println("UserService 객체 생성!");
		return new UserServiceImpl();
	}
}

new UserController() 객체 생성 시 userService()를 호출하여 UserServiceImpl 객체가 리턴되어 주입되도록 하였습니다.

 

UserController

public class UserController {
	private UserService userService;
	
	public UserController(UserService userService) {
		this.userService = userService;
	}
		
	public String findNameById(String id) {
		String name = userService.findNameById(id);
		return "사용자 이름 : " + name;
	}
}

 

UserServiceImpl

interface 생략

public class UserServiceImpl implements UserService {
	
	public String findNameById(String id) {
		if("honggd".equals(id)) {
			return "홍길동";
		} 
		return null;	
	}
}

 

UserMain

public class UserMain {

	public static void main(String[] args) {
		ApplicationContext context = new AnnotationConfigApplicationContext(UserConfig.class);
		System.out.println("================ spring container 초기화 완료 ================");
		
		UserController userController = context.getBean(UserController.class);
		String id = "honggd";
		String name = userController.findNameById(id);
		System.out.println(name);
	}

}

@콘솔출력값
UserController 객체 생성!
UserService 객체 생성!
================ spring container 초기화 완료 ================
사용자 이름 : 홍길동

 

정상적으로 주입되어 잘 출력되는 것을 확인할 수 있습니다.