본문 바로가기

배운 거/C.S

Spring Bean이란?

https://camof1ow.tistory.com/31

 

제어 반전 컨테이너-IoC란?

https://camof1ow.tistory.com/30 의존성 주입 D.I 란? 싱글톤 패턴에서는 하나의 클래스에서 오직 하나의 인스턴스만을 가지게 되는 데 기능적인 모듈들의 단위 테스트가 필요할 때 독립적인 인스턴스 생

camof1ow.tistory.com

 

앞서 작성한 글과 이어지는 내용.

 

Spring Bean이란 스프링 컨테이너 즉 IoC에 의해 관리되는 객체를 의미한다.

 

기존 JAVA 객체는 new를 통해 새로운 인스턴스를 생성할 수 있지만.

 

Spring에서는 Spring Container를 통해 JAVA 객체를 생성하고 관리 가능하다.

 

객체를 계속 생성할 필요없이 미리 생성해두고 사용하는 방식으로 이해하면 되겠다.

 

 

Bean의 등록 방식

1. 컴포넌트 스캔

작성된 어노테이션을 통해 Spring이 알아서 추가하도록 하는 방법

 

컴포넌트 스캔은 @Component를 명시하여 빈을 추가하는 방법이다. 클래스 위에 @Component를 붙이면 스프링이 알아서 스프링 컨테이너에 빈을 등록한다.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {

 

참고로 @Component는 위와 같이 ElementType.TYPE 설정이 있으므로 Class 혹은 Interface에만 붙일 수 있다.

 

컴포넌트 스캔의 대상

@Component 외에 @Controller, @Service, @Repository, @Configuration는 @Component의 상속을 받고 있으므로 모두 컴포넌트 스캔의 대상이다.

 

  • @Controller
    • 스프링 MVC 컨트롤러로 인식된다.
  • @Repository
    • 스프링 데이터 접근 계층으로 인식하고 해당 계층에서 발생하는 예외는 모두 DataAccessException으로 변환한다.
  • @Service
    • 특별한 처리는 하지 않으나, 개발자들이 핵심 비즈니스 계층을 인식하는데 도움을 준다.
  • @Configuration
    • 스프링 설정 정보로 인식하고 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다. (물론 스프링 빈 스코프가 싱글톤이 아니라면 추가 처리를 하지 않음.)

 

2. JAVA 코드로 등록

Java 코드로 빈을 등록할 수 있다. 클래스를 생성하고, 위에서 언급한 @Configuration 어노테이션을 활용한다.

 

@Configuration
public class AppConfig {

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

}

 

이때, 빈을 등록하기 위해 인스턴스를 생성하는 메소드 위에 @Bean를 명시하면 된다.

 

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {

 

참고로 @Bean은 위와 같이 ElementType 설정이 METHOD 혹은 ANNOTATION_TYPE이므로 메소드나 어노테이션에만 붙일 수 있다. 클래스에 붙일 수는 없다.

 

Component Scan

@Configuration에는 @Component가 있으므로 컴포넌트 스캔이 대상이 되어 자동 스캔을 통해 빈 등록이 가능하다.

 

3.수동 등록

거의 사용하지는 않지만, ApplicationContext를 호출하여 수동으로 설정 파일을 이용하여 빈을 수동 등록할 수도 있다.

 

public class Main {

    public static void main(String[] args) {
        final ApplicationContext beanFactory = new AnnotationConfigApplicationContext(AppConfig.class);
        final AppConfig bean = beanFactory.getBean("appConfig", AppConfig.class);
    }
}

 

 

https://steady-coding.tistory.com/594

 

[Spring] Spring Bean 총 정리

spring-study에서 스터디를 진행하고 있습니다. 스프링 빈이란? 스프링 빈은 스프링 컨테이너에 의해 관리되는 자바 객체(POJO)를 의미한다. 스프링 컨테이너 스프링 컨테이너는 스프링 빈의 생명 주

steady-coding.tistory.com

 

 

'배운 거 > C.S' 카테고리의 다른 글

CORS ?  (0) 2022.08.14
Rest API?  (0) 2022.08.09
제어 반전 컨테이너-IoC란?  (0) 2022.07.31
의존성 주입 D.I 란?  (0) 2022.07.31
[자료구조] 이진탐색트리  (0) 2022.07.30