Spring 5

원종운·2020년 12월 9일
0

Spring Bean

  • Spring Bean에서 Bean은 POJO(Plain Old Java Object)를 칭합니다.
  • Spring IoC 컨테이너는 이러한 Bean을 구성(생성) 및 관리하는 일을 수행합니다.
  • 기본적으로 Spring IoC 컨테이너는 Bean을 싱글톤 타입으로 관리합니다.
    • @Scope 에너테이션을 통하여 Bean의 생성 타입을 지정하여줄 수 있으며 기본이 싱글톤입니다

Bean 생성시 생성자 호출 기준

  • 생성자가 정의되어있지 않을 경우 컴파일러에 의하여 생성된 default 생성자를 Spring에서 호출합니다.
  • 인수가 없는 생성자를 명시적으로 선언한 경우, 해당 생성자를 Spring에서 호출합니다.
  • 만약 어떠한 의존성이 필요로 하는 생성자가 정의되어있다면, 해당 생성자를 Spring에서 호출합니다.
  • 여러개의 생성자가 선언되어있을 경우 모호성이 발생하여, Spring은 어떠한 생성자를 호출할지 알 수가 없으므로 해결해주어야합니다.

@Bean

  • 메서드에만 사용가능한 에너테이션이며, 해당 에너테이션이 붙은 메서드가 반환하는 객체(POJO)가 Bean임을 Spring에 알려줍니다.
  • Bean의 이름은 기본적으로 해당 메서드와 동일한 이름입니다.
  • name 속성을 통하여 해당 Bean의 이름을 지정하여줄 수 있습니다.
  • 개발자가 제어할 수 없는 외부 라이브러리를 통하여 Bean을 구성하여야할 때 사용합니다.

@Component

  • 클래스에 주로 사용하는 에너테이션이며, 해당 에너테이션이 붙은 클래스를 Bean임을 Spring에 알려줍니다.
  • @Scope 에너테이션이 같이 사용되는 경우가 거의 없으나, 해당 에너테이션으로 해당 빈의 생성 타입을 설정하여줄 수 있습니다. (기본 타입은 싱글톤)
  • Bean의 이름은 기본적으로 해당 클래스 명의 첫 문자를 소문자로한 이름입니다.
  • name 속성을 통하여 해당 Bean의 이름을 지정하여줄 수 있습니다.
  • @Bean 에너테이션과는 다르게 메서드에 사용할 수 없으며, 목적 또한 개발자가 직접 작성한 클래스를 Bean으로 등록하고자할 때 사용합니다.
  • 해당 에너테이션이 붙을 경우 Component-Scan의 대상이 됩니다.

BeanFactory

  • 작성중...

ApplicationContext

  • 작성중...

AnnotationConfigApplicationContext

  • 작성중...

@Configure

  • 클래스에 주로 사용하는 에너테이션이며, 해당 클래스가 Configure 클래스임을 Spring에 알립니다.
  • Spring IoC 컨테이너는 등록된 Configure 클래스에 존재하는 Bean을 구성(생성)하여줍니다.
  • @Component 에너테이션을 가지고 있습니다.

@ComponentScan

  • 지정한 시작지점으로부터 @Component 에너테이션이 붙은 클래스를 스캔하여 Bean으로 등록하여줍니다.

    • basePackages 속성으로 스캔의 기준이 되는 패키지명(문자열)을 지정해줄 수 있으며, 해당 패키지를 기준으로하여 스캔(하위 패키지 포함)합니다.
      • 패키지명이 문자열로 지정되므로 Type-Safe 하지 못하며, 철자가 틀릴 경우 정상적으로 스캔되지 못할 수 있습니다.
    • basePackageClasses 속성으로 스캔의 기준이 되는 클래스를 지정해줄 수 있으며, 해당 클래스를 포함하는 상위 패키지를 기준으로하여 스캔(하위 패키지 포함)합니다.
      • Class를 지정하여주는 것이기때문에 Type-Safe합니다.
  • @Component 에너테이션을 가지고 있는 에너테이션은 다음과 같습니다.

    • @Repository 에너테이션
    • @Service 에너테이션
    • @Controller, @RestController 에너테이션
    • @Component 에너테이션
    • @Configure 에너테이션
    • 기타 등등..

@Autowired

  • 필드, 메서드, 생성자에 사용할 수 있습니다.
  • 필드에 사용할 경우, 해당 필드의 타입과 호환되는 Bean을 찾아 연결(할당)하여 줍니다.
  • 메서드(주로 Setter)에 사용할 경우, 해당 메서드의 파라미터와 호환되는 Bean을 찾아 연결(할당)하여 줍니다.
    • 메서드의 파라미터의 수와 관계없이 모두 연결(할당)하여 줍니다.
  • 생성자 또한 메서드의 일종이므로 동일합니다. 다만, 스프링 4.3 버전부터는 클래스의 생성자가 하나일 경우, 자동으로 연결(할당)하여줍니다.
profile
Java, Python, JavaScript Lover

0개의 댓글