[Spring Bean]
: 스프링은 애플리케이션의 복잡성을 줄이고, 유지보수를 용이하게 하기 위해서 객체의 생성, 설정 및 생명주기를 관리하는 스프링 컨테이너를 제공한다. 해당 컨테이너가 관리하는 객체를 스프링 빈이라고하고, 이를 통해서 의존성 주입이나 객체 관리가 자동화된다.
[Bean Registration]
: 스프링에서 빈을 등록하는 방법은 다양한다. (= 빈을 만드는 방법)
어노테이션을 사용해 클래스에 추가하는 방법이 있다.
@Component
: 스프링아, 이 클래스를 빈으로 만들어서 관리해줘!
@Component
public class SpringBean {
public String hello() {
return "Hello";
}
}
이제 스프링이 SpringBean 클래스를 관리하게 된다.
[Bean Autowiring]
: 스프링 컨테이너에 등록된 객체는 매번 새로 생성할 필요 없이 컨테이너에서 가져와서 사용할 수 있다. (빈 자동 연결)
@Autowired
private SpringBean springBean;
[Dependency Injection]
:스프링 컨테이너에 등록된 스프링 빈 간의 의존성을 관리하는 방법은 다양하다. 그 중 어노테이션을 이용한 방법으로 생성자, 세터, 필드에 해당 @Autowired 어노테이션을 추가하는 방법이 있다.
*참고로
: InjectionBean은 혼자 움직일 수 없고, ConstructorInjection이라는 것 안에서 움직일 수 있다.
[Constructor Injection]
:스프링 컨테이너에 등록된 스프링 빈 간의 의존성을 생성자를 통해 주입하는 방법이다.
private InjectionBean injectionBean;
public ConstructorInjection(InjectionBean injectionBean) {
this.injectionBean = injectionBean;
}
여기서 'ConstructorInjection을 만들 때, InjectionBean이라는 객체를 미리 넣어줌으로써 의존성을 주입한다.
[Setter Injection]
:스프링 컨테이너에 등록된 스프링 빈 간의 의존성을 세터를 통해 주입하는 방법이다.
private InjectionBean injectionBean;
@Autowired
public void setInjectionBean(InjectionBean injectionBean){
this.injectionBean = injectionBean;
}
[Field Injection]
: 스프링 컨테이너에 등록된 스프링 빈 간의 의존성을 필드를 통해 주입하는 방법이다.
@Autowired
private InjectionBean injectionBean;
[Component Scan]
: 스프링에서 특정 패키지를 스캔해, 그 패키지 안에 있는 @Component, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스를 == 컨테이너에 등록된 스프링 빈을 자동으로 찾아 등록하는 역할을 한다.
[@ComponentScan]
: @ComponentScan 어노테이션을 이용해 스캔할 패키지를 지정할 수 있다. 앞에서 해당 어노테이션을 사용하지 않고도 정상동작했던 이유는 @SpringBootApplication이 @ComponentScan을 포함하고 있기 때문이다.
@ComponentScan 이 덕분에 @Component로 표시된 클래스들이 자동으로 스프링 빈으로 등록되었던 것이다.
@ComponentScan 이 어노테이션이스프링 빈을 관리하고, 자동으로 설정해주기 때문에 @Autowired가 정상적으로 작동할 수있다.
@Configuration
@ComponentScan(basePackages = "cholog.scan")
public class ContextConfiguration {
}
ComponenetScanBean을 Bean으로 등록하기
상위 패키지를 스캔하도록 함으로써
상위패키지 아래에 등록된 빈을 사용하도록 만듦
'프레임워크 > Spring' 카테고리의 다른 글
Java 애플리케이션 테스트 라이브러리: JUnit5 AssertJ (1) | 2024.10.01 |
---|---|
Spring Core 2 (0) | 2024.08.14 |
Spring JDBC(Java Database Connectivity) 1 (0) | 2024.08.12 |
Spring mvc 4 (MVC Configuration, View Controller, Interceptor, Argument Resolver) (0) | 2024.08.06 |
Spring mvc 3 (예외처리) (0) | 2024.08.05 |