반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- DI
- assertThat
- 스프링 부트 입문
- 생성자 주입
- thymeleaf
- 스프링부트
- mybatis
- assertThrows
- 스프링 프레임워크
- sqld
- @Configuration
- db
- spring
- DIP
- 스프링 부트 기본
- 싱글톤
- 스프링 빈
- JPA
- springboot
- 스프링 컨테이너
- jdbc
- java
- Effective Java
- 스프링
- SQL
- 필드 주입
- resultMap
- kafka
- Javascript
- 스프링 부트
Archives
- Today
- Total
선 조치 후 분석
@Autowired vs @Resource 차이점 본문
728x90
반응형
SMALL
보통 @Autowired를 활용해서 의존성 주입을 해왔지만 @Resource를 이용해서 의존성 주입하는 프로젝트를 진행하면서
차이점을 공부하려고 정리해 본다.
@Autowired와 @Resource는 빈(Bean)을 주입하는 데 사용되는 어노테이션이다.
둘 다 빈(Bean) 주입을 위한 목적으로 사용되지만, 몇 가지 차이점이 있다.
@Autowired
- 스프링의 의존성 주입(DI) 기능을 활용하여 빈(Bean)을 주입
- 타입(Type)에 따라 주입을 수행하며, 동일한 타입의 빈(Bean)이 여러 개 존재할 경우에는 변수 이름과 빈(Bean)의 이름을 비교하여 주입
- 생성자, 필드, 메서드의 파라미터에 어노테이션을 사용하여 의존성을 주입할 수 있다.
- Spring에서 제공하는 어노테이션
필드 주입
@Service
public class UserService {
// @Autowired를 사용하여 UserServiceImpl 빈을 주입합니다.
@Autowired
private UserRepository userRepository;
// ...
}
생성자 주입
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
메서드 주입
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
@Qualifier 어노테이션 사용 예시 - 동일한 타입의 빈이 여러 개인 경우
각 빈(Bean)의 @Component, @Service, @Repository 등의 어노테이션에서 설정한 이름 이거나 빈(Bean) 이름을 명시적으로 지정한 경우에 해당한다.
@Service
public class UserService {
@Autowired
@Qualifier("customUserRepository") // customUserRepository 빈을 주입
private UserRepository userRepository;
// ...
}
@Resource
- Java 표준 어노테이션으로, Spring과 별개로 Java EE와 호환되는 어노테이션
- 주로 이름(Name)에 따라 빈(Bean)을 주입한다. 기본적으로 빈(Bean)의 이름과 변수 이름을 비교하여 주입하며, 'name' 속성을 사용하여 빈(Bean)의 이름을 직접 지정할 수 있다.
- 필드, 메서드에 사용할 수 있으며, 생성자에는 사용할 수 없다.
필드 주입
@Service
public class UserService {
// @Resource를 사용하여 userServiceImpl 빈을 주입합니다.
@Resource
private UserServiceImpl userServiceImpl;
// ...
}
메서드 주입
@Service
public class UserService {
private UserServiceImpl userServiceImpl;
@Resource
public void setUserServiceImpl(UserServiceImpl userServiceImpl) {
this.userServiceImpl = userServiceImpl;
}
// ...
}
이름지정
@Service
public class UserService {
// @Resource의 name 속성을 사용하여 다른 이름의 빈을 주입합니다.
@Resource(name = "customUserService")
private UserService customUserService;
// ...
}
즉, @Autowired는 타입(Type)에 따라 주입하고, 변수 이름과 빈(Bean)의 이름을 비교한다.
@Resource는 이름(Name)에 따라 주입하며, 변수 이름과 빈(Bean)의 이름을 비교하거나 'name' 속성을 통해 지정한다.
728x90
반응형
LIST
'Framework > Spring Framework' 카테고리의 다른 글
[Spring] 스프링 컨텍스트(Spring Context) 그리고 스프링 MVC 개념과 흐름 (0) | 2025.01.13 |
---|---|
web.xml, dispatcher-servlet.xml, pom.xml 개념과 차이점 그리고Spring 웹 애플리케이션 동작순서 (0) | 2023.08.25 |
@RequestBody와 @ResponseBody (0) | 2023.08.21 |
@PathVariable vs @RequestParam vs @RequestBody 그리고 HttpServletRequest , 파라미터 수신 방법 정리 (1) | 2022.09.23 |
[Spring Framework] Maven으로 JRE System Library JavaSE-1.8로 변경하기 (0) | 2022.05.16 |