Spring IOC 컨테이너가 관리하는 자바 객체를 빈(Bean) 이라고 부른다.
일반적인 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 제어하고,객체를 직접 생성하고 조작을 했다.
Class 를 생성하고 new 를 입력해서 원하는 객체를 직접 생성 후 사용했다.
즉 , 모든 작업자가 제어하는 구조로 흘러갔다.
IOC(제어의역전) 가 적용될 경우, 객체의 생성을 특별한 주체에 맡긴다.
이러한 경우, 사용자는 객체를 직접 생성하지 않으며, 사용자가 제어권을 다른 주체에 넘긴다.
new 를 이용하여 생성된 객체가 아니라, Spring에서 관리되는 자바 객체를 사용한다.
Spring 에 의해 생성되고 관리되는 자바 객체를 Bean 이라고 한다.
Bean 은 싱글톤으로 관리된다
@Configuration + @Bean
수동으로 Bean을 등록하는 방법이다.
클래스에 @Configuration을 붙여주어야 하며, @Bean을 이용해서 등록할때는 메소드명이 bean 이름으로 등록된다
중복된 빈 이름이 존재하지 않도록 주의해야 한다.
@Configuration
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
...
@Bean
public PasswordEncoder passwordEncoder() {
..
}
}
스프링 컨테이너는 @Configuration 이 붙어있는 클래스에서 @Bean이 붙어있는 메소드를 찾아 bean으로 등록시킨다.
@Configuraion을 필수로 붙여주어야하며, 그래야 싱글톤으로 보장받을 수 있다.
이러한 방법을 사용하는 상황과 특징은 아래와 같다.
- 개발자가 직접 만든것이 아닌, 제어가 불가능한 라이브러리를 활용할 때
- 애플리케이션 전범위에 사용될 때
- @Configuration이 붙은 클래스에서 등록된 bean 을 전부 확인할 수 있기 때문에 유지보수하기 좋다.
- 빈을 등록하는 횟수가 많아질수록 수동으로 등록하기에는 한계가 있다. 따라서 @Component 어노테이션을 사용한다.
@Component 어노테이션
스프링은 컴포넌트 스캔을 통해 @Component가 붙어있는 클래스들을 모두 찾아 스프링 빈으로 자동등록해준다.
직접 개발한 클래스를 빈으로 등록하고자 할때는 @Component를 활용하면 된다.
예시코드는 자주 사용하는 @Controller , @Service , @Repository 등이 있다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
참고
https://mangkyu.tistory.com/75?category=761302
'Spring > Spring-detail' 카테고리의 다른 글
Ioc(Inversion of Control) 제어의 역전이란? (0) | 2022.10.26 |
---|---|
@Bean 과 @Component 비교 (0) | 2022.10.24 |
DispatchServlet(디스패처 서블릿) 에 대해 알아보자. (0) | 2022.10.14 |
@Controller 와 @RestController 의 원리 (1) | 2022.10.13 |
@valid 를 사용해보자 (유효성 검사) (0) | 2022.10.13 |
댓글