본문 바로가기
개인공부

Spring Bean

by 요리하다그만둠 2022. 9. 5.

스프링 빈 (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