Skip to main content

Spring Core 1

1. Spring Bean

스프링은 애플리케이션의 복잡성을 줄이고 유지보수를 용이하게 하기 위해 객체의 생성, 설정 및 생명주기를 관리하는 스프링 컨테이너를 제공합니다. 이 컨테이너가 관리하는 객체를 스프링 빈이라고 하며, 이를 통해 의존성 주입 및 객체 관리가 자동화됩니다.

1.1. Bean Registration

스프링에서 빈을 등록하는 방법은 다양한데, 그 중 애너테이션을 이용한 방법으로 클래스에 @Component 어노테이션을 추가하는 방법이 있습니다.

@Component
public class SpringBean {
}

학습 테스트

  • 테스트 메서드: cholog.BeanTest.registerBean
  • 수행 방법
    • cholog.bean.SpringBean 클래스를 이용하여 학습 테스트를 성공시키세요.

1.2 Bean Autowiring

스프링 컨테이너에 등록된 객체는 매번 새로이 생성할 필요없이 컨테이너에서 가져와서 사용할 수 있습니다.

@Autowired
private SpringBean springBean;

학습 테스트

  • 테스트 메서드: cholog.BeanTest.autowiredBean
  • 수행 방법
    • cholog.bean.AutowiredBean 클래스를 이용하여 학습 테스트를 성공시키세요.

2. Dependency Injection

스프링 컨테이너에 등록된 스프링 빈 간의 의존성을 관리하는 방법은 다양합니다. 그 중 애너테이션을 이용한 방법으로 생성자, 세터, 필드에 @Autowired 어노테이션을 추가하는 방법이 있습니다.

2.1. Constructor Injection

스프링 컨테이너에 등록된 스프링 빈 간의 의존성을 생성자를 통해 주입하는 방법입니다.

private InjectionBean injectionBean;

public ConstructorInjection(InjectionBean injectionBean) {
this.injectionBean = injectionBean;
}

학습 테스트

  • 테스트 메서드: cholog.DependencyInjectionTest.constructorInjection
  • 수행 방법
    • cholog.di.ConstructorInjection 클래스를 이용하여 학습 테스트를 성공시키세요.

2.2. Setter Injection

스프링 컨테이너에 등록된 스프링 빈 간의 의존성을 세터를 통해 주입하는 방법입니다.

private InjectionBean injectionBean;

@Autowired
public void setInjectionBean(InjectionBean injectionBean) {
this.injectionBean = injectionBean;
}

학습 테스트

  • 테스트 메서드: cholog.DependencyInjectionTest.setterInjection
  • 수행 방법
    • cholog.di.SetterInjection 클래스를 이용하여 학습 테스트를 성공시키세요.

2.3. Field Injection

스프링 컨테이너에 등록된 스프링 빈 간의 의존성을 필드를 통해 주입하는 방법입니다.

@Autowired
private InjectionBean injectionBean;

학습 테스트

  • 테스트 메서드: cholog.DependencyInjectionTest.autowiredInjection
  • 수행 방법
    • cholog.di.FieldInjection 클래스를 이용하여 학습 테스트를 성공시키세요.

3. Component Scan

스프링 컨테이너에 등록된 스프링 빈을 자동으로 찾아서 등록하는 방법입니다.

3.1. @ComponentScan

@ComponentScan 어노테이션을 이용하여 스캔할 패키지를 지정할 수 있습니다. 앞서 수행한 학습 테스트에서 @ComponentScan을 사용하지 않고도 정상동작했던 이유는 @SpringBootApplication@ComponentScan을 포함하고 있기 때문입니다.

...
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
...
}

학습 테스트

  • 테스트 메서드: cholog.ComponentScanTest.scanComponent
  • 수행 방법
    • cholog.scan.ContextConfiguration 클래스를 이용하여 학습 테스트를 성공시키세요.

6. 참고자료