Spring[Info] - 빈(Bean)

2021. 7. 2. 14:09Spring/Spring[Info]

반응형

🤔 빈 (Bean)?

  • IoC에서 관리되는 일반적인 객체

다음 객체는 Bean이 아니다

OwnerController ownerController = new OwnerController();

다음 객체는 applicationContext에서 관리하는 객체를 가져왔으므로 Bean이다.

OwnerController bean = applicationContext.getBean(OwnerController.class);

🤔 Bean 만드는 방법?

2가지 방법

  • Component Scanning
  • 직접 등록하기

Component Scanning

  • @Controller라는 Annotation은 사실 @Component Annotation을 사용하도록 구현되어 있다.
  • Annotation 프로세서 중 IoC가 사용하는 여러가지 interface들이 있는데, 이것을 라이프 사이클 콜백이라고 부른다.

직접 등록하기

  • XML, Java 설정 파일을 통해 등록해준다.
@Configuration
public class SampleConfig {

    @Bean
    public SampleController sampleController() {
        return new SampleController();
    }
}
@Test
public void testDI() {
    SampleController bean = applicationContext.getBean(SampleController.class);
    assertThat(bean).isNotNull();
}

🤔 Bean 사용 방법?

  • ApplicationContext를 통해 직접 꺼내기
  • 생성자 대신 @Autowired Annotation을 사용하기 (DI 방식)

가져오는 방법 3가지

  • Spring 4.3 버전부터는 생성자가 1개 뿐이고 매개변수가 Bean 객체이면 해당 Bean을 자동으로 주입해주도록 추가됨
  • 위 경우라면 @Autowired 생략 가능

1. 필드

@Autowired
private final OwnerRepository owners;

@Autowired
private VisitRepository visits;

 

2. Setter

@Autowired 
public void setOwners(OwnerRepository owners) {
    this.owners = owners;
}

3. 생성자

// @Autowired 생략 가능  
private final OwnerRepository owners;

// @Autowired 생략 가능  
private VisitRepository visits;

public OwnerController(OwnerRepository clinicService, VisitRepository visits) {
    this.owners = clinicService;
    this.visits = visits;
}

 

반응형