기존의 Java Programming 에서는 Class를 생성하고 new를 입력하여 원하는 객체를 직접 생성한 후에 사용했다. 하지만 Spring에서는 직접 new를 이용하여 생성한 객체가 아니라, Spring에 의해 관리되는 자바 객체를 사용한다. 이렇게 Spring에 의하여 생성되고 관리되는 자바 객체를 빈(Bean)이라고 한다. Spring Framework에서는 Spring Bean을 얻기 위해 ApplicationContext.getBean() 와 같은 메소드를 사용하여 Spring 에서 직접 자바 객체를 얻어서 사용한다.
빈(Bean)
재사용 가능한 소프트웨어 컴포넌트이며, 스프링 컨테이너는 하나 이상의 빈(Bean)을 관리한다. 빈(Bean)은 인스턴스화된 객체를 의미하며,
@Bean 어노테이션을 통해 메서드로부터 반환된 객체를 스프링 컨테이너에 등록한다. 빈(Bean)은 클래스의 등록정보, Getter/Setter 메서드를 포함하며, 컨테이너에 사용되는 설정 메타데이터로 생성된다.
* 설정메타데이터란?
XML, 자바 어노테이션, 자바 코드로 표현하며, 컨테이너의 명령과 인스턴스화, 설정, 조립할 객체 등을 정의한다.
스프링 빈을 스프링 컨테이너에 등록하는 방법
1. 자바 어노테이션(Annotation)을 사용하는 방법
Spring에서는 여러가지 Annotation을 사용하지만, 빈(Bean)을 등록하기 위해서는 @Component 어노테이션을 사용한다. @Component 어노테이션이 등록되어 있는 경우 Spring이 Annotation을 확인하고 자체적으로 Bean으로 등록한다.
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "This is data!!");
return "hello";
}
}
다음은 스프링 프로젝트에서 컨트롤러(Controller)를 등록할 때 @Controller 어노테이션을 사용하는 예시이다. @Controller 어노테이션을 사용하면 스프링 컨테이너에 빈(Bean)으로 자동 등록된다
@Component를 포함하는 다음 어노테이션도 스브링 빈(Bean)으로 자동 등록된다
• @Controller
• @Service
• @Repository
2. 자바 코드로 직접 스프링 빈(Bean)을 등록하는 방법
package hello.hellospring;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
@Configuration과 @Bean 어노테이션 을 이용하여 Bean을 등록할 수 있다.
'Back > Spring(Springboot)' 카테고리의 다른 글
[스프링부트 입문] 시리즈 #02 정적페이지 만들고 화면 띄우기 (0) | 2023.08.31 |
---|---|
[스프링부트 입문] 시리즈 #01 프로젝트 생성하기 (0) | 2023.08.30 |
[Spring] 빌드 관리 도구 : Maven과 Gradle의 차이 (0) | 2023.08.23 |
[SpringBoot] 이클립스에서 Test Case 만들기 (0) | 2023.07.27 |
MVC패턴 (0) | 2022.01.13 |