[요약]
@Autowired 어노테이션은 Spring의 ApplicationContext에서 필요한 객체를 찾는 데 사용됩니다.
@Autowired 어노테이션 역할
스프링 컨테이너에 어노테이션을 통해 빈을 등록하는 방법은 크게 두 가지다.
- @Bean 어노테이션을 통한 빈 등록 (메서드 레벨)
* 메서드를 통해 반환되는 객체를 Bean으로 관리
- @Component 어노테이션을 통한 빈 등록 (클래스 레벨)
* 클래스에 붙여 해당 클래스 타입을 기반으로 Bean을 관리
* @Repository, @Service, @Controller 등의 어노테이션들은 @Component를 이미 포함
* @Component를 통해 등록된 빈은 다른 곳에서 @Autowired를 사용해 의존성 주입 가
이 어노테이션은 Spring 컨테이너가 자동으로 필요한 객체를 찾아 주입해 주는 기능을 제공합니다.
@Autowired
public BoardController(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
[로직]
[@Autowired] Spring 컨테이너야. BoardController라는 클래스가 ApplicationContext 라는 애한테 의존하고 있으니 ApplicationContext를 자동으로 주입해. 그럼 BoardController는 ApplicationContext를 몰라도 되잖아.
그렇게 안하면 아래처럼 코드를 작성해야돼. 그럼 너무 복잡하잖아.
public class BoardController {
private final ApplicationContext applicationContext;
public BoardController(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
// 컨트롤러 메서드 구현
}
스프링 컨테이너: ApplicationContext 역할
ApplicationContext는 Spring 프레임워크에서 사용되는 핵심 인터페이스 중 하나입니다.
이 인터페이스는 Spring 애플리케이션의 컨테이너 역할을 하며, 다음과 같은 주요 기능을 제공합니다:
1. Bean 관리: ApplicationContext는 애플리케이션에서 사용되는 모든 Bean(Spring 컴포넌트)을 관리합니다. 이를 통해 Bean의 생성, 의존성 주입, 생명주기 관리 등을 처리할 수 있습니다.
2. 환경 설정 관리: ApplicationContext는 애플리케이션의 환경 설정 정보(properties, XML 파일 등)를 관리합니다. 이를 통해 애플리케이션의 동작 방식을 외부에서 설정할 수 있습니다.
3. 국제화 지원: ApplicationContext는 국제화 기능을 제공하여 다국어 지원이 가능합니다.
4. 이벤트 처리: ApplicationContext는 애플리케이션 내부에서 발생하는 이벤트를 처리할 수 있는 기능을 제공합니다.
5. 리소스 로딩: ApplicationContext는 애플리케이션에서 필요한 리소스(파일, 이미지 등)를 로딩할 수 있습니다.
6. AOP 지원: ApplicationContext는 애플리케이션의 Aspect Oriented Programming (AOP) 기능을 지원합니다.
이와 같은 다양한 기능을 통해 ApplicationContext는 Spring 애플리케이션의 핵심적인 역할을 수행합니다. 개발자는 ApplicationContext를 통해 애플리케이션의 구조와 동작을 효과적으로 관리할 수 있습니다.
예시1. Bean 관리 (의존성 주입)
@PostMapping("/post.do")
public String post(BoardDto boardDto) {
// 게시판 타입에 따른 동적 의존성 주입
if(boardDto.getType().equals("free")) {
boardService = applicationContext.getBean("freeBoardServiceImpl", BoardService.class);
} else {
boardService = applicationContext.getBean("noticeServiceImpl", BoardService.class);
}
boardService.post(boardDto);
if(boardDto.getType().equals("free")) {
return "redirect:/board/free-list.do";
} else {
return "redirect:/board/notice-list.do";
}
}
해당 코드에서 applicationContext는 다음과 같은 역할을 하고 있습니다:
스프링에서 **"동적으로 가져온다"**는 표현은 애플리케이션이 실행 중에 필요한 빈(bean)을 필요할 때마다 생성하거나 가져올 수 있다는 의미입니다. 즉, 빈이 프로그램의 정적 상태가 아니라, 런타임에 상황에 따라 결정된다는 것입니다. 이를 통해 유연한 설계와 효율적인 리소스 관리를 가능하게 합니다.
1. 동적 의존성 주입:
• 게시판 타입에 따라 적절한 BoardService 구현체를 선택하여 주입하고 있습니다.
• applicationContext.getBean()을 사용하여 필요한 BoardService 구현체를 동적으로 가져오고 있습니다.
• 이를 통해 게시판 타입에 따라 다른 서비스 로직을 적용할 수 있습니다.
2. Spring Bean 관리:
• applicationContext는 Spring 컨테이너의 역할을 하며, 애플리케이션에서 사용되는 모든 Bean(Spring 컴포넌트)을 관리하고 있습니다.
• getBean() 메서드를 사용하여 필요한 Bean을 동적으로 가져올 수 있습니다.
3. 의존성 주입:
• BoardController는 ApplicationContext를 생성자 주입(Constructor Injection)을 통해 받고 있습니다.
• 이를 통해 BoardController가 필요로 하는 BoardService 구현체를 동적으로 주입받을 수 있습니다.
4. 환경 설정 관리:
• ApplicationContext는 애플리케이션의 환경 설정 정보(properties, XML 파일 등)를 관리하고 있습니다.
• 이를 통해 게시판 타입에 따른 서비스 구현체 선택 등의 로직을 외부 설정에 따라 동적으로 변경할 수 있습니다.
종합적으로 이 코드에서 ApplicationContext는 Spring의 핵심 기능인 의존성 주입, Bean 관리, 환경 설정 관리 등을 활용하여 게시판 타입에 따른 동적인 서비스 로직 처리를 가능하게 하고 있습니다. 이를 통해 코드의 유연성과 확장성을 높일 수 있습니다.
'백엔드 > 스프링 프레임워크 단어정리' 카테고리의 다른 글
form 데이터 submit 시 어떤 정보가 전달되는가? (0) | 2024.07.19 |
---|---|
Spring Framework / Model 역할 (0) | 2024.07.17 |
get vs post (0) | 2024.07.16 |
(오류) Mapped Statements... 해결 방안 (0) | 2024.07.16 |
ajax에서 return 값이 String이 아닌 JSON 형태여야 하는 이유 (0) | 2024.07.16 |