@Bean @Component 뭐가 다름?

한꼬북·2024년 5월 14일
0

spring

목록 보기
3/3
post-thumbnail

이걸 왜 쓰는데?

스프링 컨테이너에서 자바 객체들에 대한 생성 주기를 관리한다.

여기서 관리 대상인 자바 객체를 빈이라고 부르고
정확히는 BeanFactory, ApplicationContext 컨테이너로 나뉘는데
특별한 이유가 없다면 일반적으로 ApplicationContext 컨테이너를 사용한다고 한다.

등록된 빈을 통해서 객체들을 항상 new MemberService(); 처럼 새로 만들지 않고 싱글톤 방식으로
IoC를 위해 개발자가 아닌 스프링 컨테이너가 관리하여 객체의 의존 관계를 관리하는데에 있다.


@Bean

  • 메서드 단위에서 사용하며, 외부 라이브러리를 사용할 때 개발자가 직접 정의 하지 않은 객체를 유연하게 사용하기 위한 어노테이션
  • 싱글톤을 위해 해당 class에는 @Configuration 어노테이션을 붙여줘야 한다.
  • 메서드 이름으로 빈 이름이 등록되기 때문에 중복되지 않도록 해야 함
@Configuration
public class RedisConfig {
    
	@Bean
	public RedisConnectionFactory redisConnectionFactory() {
		return new LettuceConnectionFactory("host", 1234);
	}
    
}

@Component

  • 개발자가 직접 정의한 class를 빈으로 등록할 때 사용하는 어노테이션
  • class, interface, Enum에 사용할 수 있음
  • 스프링이 component scan을 통해 자동으로 @Component 어노테이션이 붙은 객체를 빈으로 등록함.
@Component
public class JwtIssuer {
	
    private String jwtPwd;
    
    public String parser(String jwt){
        return jwtPwd + jwt;
    }

}

결국 외부 라이브러리를 사용할 때는 @Bean을
개발자가 직접 정의한 class는 @Component를 사용해 빈으로 등록한다.

참고링크

https://galid1.tistory.com/494

profile
오히려 좋아, 자 가보자고!

0개의 댓글