스프링 빈 (Spring Bean)
- Spring Ioc 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부름
Ioc의 특징
- 일반적으로 처음에 배우는 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고
조작하는 작업(객체를 직접 생성하여 메서드 호출)을 했습니다. 즉 모든 작업을 사용자가 제어하는 구조
예를 들면 A객체에서 B객체에 있는 메서드를 사용하고 싶으면 B 객체를 직접 A객체 내에서 생성하고 메서드를 호출
하지만 Ioc가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡김. 이 경우 사용자는 객체를 직접
생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 됨 즉 사용자의 제어권을 다른 주체에게 넘기는 것을
Ioc(제어의 역전)이라고 함
우리가 알던 기존의 Java Programing 에서는 class를 생성하고 new 를 입력하여 원하는 객체를 직접 생성한 후에
사용했었지만 Spring에서는 직접 new를 이용하여 생성한 객체가 아니라, Spring에 의하여 관리당하는 자바 객체를
사용합니다. 이렇게 Spring에 의하여 생성되고 관리되는 자바 객체를 Bean이라고 함
Springframework 에서는 Spring Bean을 얻기 위하여 ApplicationContext.getBean()와 같은 메서드를 ]
사용하여 Spring 에서 직접 자바 객체를 얻어 사용
Spring Bean을 Spring Ioc Container에 등록하는 방법
Java 에서는 @Override, @Deprecated 와 같은 기본적인 Annotation을 제공합니다.
Spring에서는 여러 가지 Annotation을 사용하지만, Bean을 등록하기 위해서는 @Component Annotation
을 사용합니다. @Component Annotation이 등록되어 있는 경우에는 Spring이 Annotation을 확인하고
자체적으로 Bean으로 등록합니다.
실제로 사용되는 예시 - Spring 프로젝트에서 Controller을 등록할 때에는 아래와 같이 Annotation을 사용합니다.
아래의 에시에서 Controller임을 Spring 에게 알려주기 위하여 @Controller Annotation
을 사용했습니다.
// HelloController.java
@Controller
public class HelloController {
// Http Get Method 의 / hello 경로로 요청이 들어올 때 처리할 Method를 아래와 같이
// @GetMapping Annotation을 사용하여 Mapping을 사용할 수 있습니다.
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "This is data!!");
return "hello";
}
}
@Controller Annotation을 intellij에서 Crtl 을 눌러서 이동해 보면 아래와 같은 소스를 확인할 수 있습니다.
@Controller Annotation에는 @Component Annotation이 있는 것을 확인할 수 있습니다.
@Component Annotation 으로 인하여 Spring은 해당 Controller를 Bean으로 등록해야 합니다.
// Controller.java
// -일부 생략-
@Target({ElementType.Type})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
@AliasFor(annotation = Component.class)
String value() default "";
}
Bean Configuration File 에 직접 Bean 등록하는 방법
@Configuration과 @Bean Annotation을 이용하여 Bean을 등록할 수 있습니다.
@Configuration을 이용하면 Spring Project 에서의 Configuration 역할을 하는 Class를 지정할 수 있습니다.
해당 File 하위에 Bean으로 등록 하고자 하는 Class 에 @Bean Annotation을 사용해주면 간단하게 Bean을 등록할 수 있습니다.
// Hello.java
@Configuration
public class HelloConfiguration {
@Bean
public HelloController sampleController() {
return new SampleController;
}
}
'개인공부' 카테고리의 다른 글
Spring Thymeleaf Cannot resolve 오류 (0) | 2022.10.23 |
---|---|
Mybatis (0) | 2022.09.05 |
Maven (0) | 2022.08.26 |
jdbc docker 연동오류.docker ip확인하기 (0) | 2022.08.08 |
Docker Tomcat mysql 환경 구성 (0) | 2022.08.08 |