@Resource vs. @Bean 어노테이션 차이
| 구분 |
@resource |
@bean |
| 목적 |
주입 (Injection) |
객체 생성 및 등록 |
| 사용 위치 |
필드, Setter 메서드 |
메서드 (일반적으로 @configuration 클래스 내부) |
| 작동 원리 |
이름(name) 또는 타입(Type)을 통해 이미 존재하는 Bean을 찾아 주입. (JSR-250 표준) |
해당 메서드가 반환하는 객체를 Spring IoC 컨테이너에 Bean으로 등록. |
| 처리 주체 |
JSR-250 표준 (Java) |
Spring Framework |
| 우선 검색 기준 |
이름 (name) -> 타입 (Type) |
- |
| 대체 어노테이션 |
@Autowired (Spring 전용 주입) |
@component, @service, @repository (클래스 레벨 Bean 등록) |
@Resource
이미 SpringContainer에 등록된 Bean을 가져와 사용하려는 목적
@Resource(name = "beanName")과 같이 name 속성이 지정되면, 해당 이름의 Bean을 찾음
이름 기반 (name) → 필드 이름 기반 → 타입 기반
@Bean
개발자가 직접 코드를 통해 객체를 생성하고 그 객체를 Spring IoC 컨테이너에 Bean으로 등록하려는 목적
클래스 레벨에 @Configuration이 붙은 설정 클래스 내부의 메서드에 선언
- Spring 컨테이너가
@Configuration 클래스를 읽음.
@Bean이 붙은 메서드를 실행.
- 이 메서드가 반환하는 객체(인스턴스)를 Bean으로 등록.
- Bean의 이름은 기본적으로 메서드 이름으로 설정.
@Resourcevs.@Bean어노테이션 차이@Resource이미 SpringContainer에 등록된 Bean을 가져와 사용하려는 목적
@Resource(name = "beanName")과 같이 name 속성이 지정되면, 해당 이름의 Bean을 찾음이름 기반 (name) → 필드 이름 기반 → 타입 기반
@Bean개발자가 직접 코드를 통해 객체를 생성하고 그 객체를 Spring IoC 컨테이너에 Bean으로 등록하려는 목적
클래스 레벨에
@Configuration이 붙은 설정 클래스 내부의 메서드에 선언@Configuration클래스를 읽음.@Bean이 붙은 메서드를 실행.