본문 바로가기
IT/Java

Spring Bean 등록(@Bean은 @Configuration 내에)

by 성준하이 2022. 9. 5.
반응형

이전 포스팅에서 스프링에서 DI 와 IoC를 사용하기 위해서는 스프링에 Bean을 등록해줘야하고 그에 대한 내용은 아래 참고포스팅에서 알아볼수 있다.

 

하지만 스프링을 다루기 위해서는 가장 중요한 부분이라서 다시 한번 정리를 할겸 포스팅을 또 한번 다뤄보게 되었다.

수동으로 등록을 할수도 있고, 자동으로 등록해줄수 있다.

 

 

수동 방법은 다음과 같다.
@Configuration
public class ResourceConfig {

    @Bean
    public class classname() {
        return new NiceResource();
    }

}

이렇게 @Bean을 통해서 수동으로 넣어줄수 있고, 

Bean이 있는 class에는 Configuration annotation을 달아줘야한다.

물론 Configuration 안에 Component 가 들어있어서 같은 기능이 되긴 하겠지만 configuraion annotation안에서 해줘야만 한다.

그 이유는 CGLib으로 프록시 패턴을 적용해 수동으로 등록하는 스프링 빈이 반드시 싱글톤으로 생성됨을 보장하기 위해서이다.

 

무슨 뜻이냐면 실수로 같은 Bean을 호출하게 될 경우 Component 는 불필요하게 여러개의 객체를 생성하는데 

Configuration에서는 CGLib 라이브러리를 사용하여 프록시 패턴을 적용시킨다.

패턴 관련해서는 아래 참고 포스팅을 확인하길 바란다.

 

만약에 경우에따라 여러개의 빈을 생성해줘야할경우 싱글톤을 꺼줘야하는데 그럴 경우엔 Configuration의 설정중 ProxyBeanMethods를 false로설정을 해주면 된다.

 

자동 방법은 다음과같다.

@Component annotation을 사용하는것이다.

해당 annotation을 사용하면 다른 class에서 annotation이 사용되고 있는 곳을 찾아서(@Service, @Repository, @RestController 등) 해당 클래스를 Bean으로 등록해준다.

특정 패키지에서 찾고 싶으면 ComponentScan을 main 메서드에 선언을 해주면 되고 springboot에서는

@SpringBootApplication annotation이 componentScan기능을 내장하고 있다.

 

 

두 방법의 비교 차이 요약은 다음과 같다.
  • @Bean, @Configuration
    • 수동으로 스프링 컨테이너에 빈을 등록하는 방법
    • 개발자가 직접 제어가 불가능한 라이브러리를 빈으로 등록할 때 불가피하게 사용
    • 유지보수성을 높이기 위해 애플리케이션 전범위적으로 사용되는 클래스나 다형성을 활용하여 여러 구현체를 빈으로 등록 할 때 사용
    • 1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 @Configuration을 명시해 주어야 싱글톤이 보장됨
  • @Component
    • 자동으로 스프링 컨테이너에 빈을 등록하는 방법
    • 스프링의 컴포넌트 스캔 기능이 @Component 어노테이션이 있는 클래스를 자동으로 찾아서 빈으로 등록함
    • 대부분의 경우 @Component를 이용한 자동 등록 방식을 사용하는 것이 좋음
    • @Component 하위 어노테이션으로 @Configuration, @Controller, @Service, @Repository 등이 있음

 


참고 포스팅

https://thenicesj.tistory.com/269

 

Spring Bean 이란?

스프링에는 다양한 특징이 있지만 그중 하나는 제어의 역전 IoC 이다. 제어의 역전에 관한 내용은 아래 참고 포스팅을 참조하면 이해하기 쉬울 것이다. 스프링 컨테이너에서 직접 객체를 관리 하

thenicesj.tistory.com

 

https://thenicesj.tistory.com/147

 

객체지향 디자인 패턴 심화 정리 part.2

part.1에 이어서 이번 포스팅에서 다뤄볼 패턴은 다음과 같다. adapter proxy facade template method adapter 말그대로 어댑터를 생각하면 편하게 이해할수 있다. 우리나라에서 사용하던 가전기기를 해외에서

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

enum 이란  (36) 2022.09.17
Spring REST Docs  (33) 2022.09.09
javadoc 관련  (33) 2022.09.03
Mybatis 3.0 이상 적용하기  (43) 2022.09.02
spring Batch  (40) 2022.08.25

댓글