일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Open EntityManager
- 제이피큐엘쿼리
- 이해와 원리
- springbootproxy
- httppie
- JPA프록시
- JPAproxy
- springbootH2
- OSIV
- 자바제너릭
- 스프링부트
- javageneric
- JPA Hint & Lock
- 데이터베이트h2
- jpa
- JPAmapping
- JPA값타입
- 에이치투데이터베이스
- jpqlquery
- dockercmd
- spring
- springboot기본설정
- embededtype
- Git
- 임베디드타입
- 스프링부트기본설정
- JDBC connection pool
- sql
- MySqlType
- gitinitial
- Today
- Total
빡코
[스프링]스프링 컨테이너를 다루는 방법 본문
@Configuration : 클래스에 붙이는 어노테이션으로, @Bean을 사용할 때 함께 사용해
주어야 한다.
@Bean : 메소드에 붙이는 어노테이션으로, 메소드에서 반환되는 객체를 스프링 빈에
등록한다
@Repository 어노테이션 대신 @Configuration과 @Bean 어노테이션을 활용하여 빈등록하기
package com.group.libraryapp.config;
import com.group.libraryapp.repository.user.UserRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
@Configuration
public class UserConfiguration {
@Bean
public UserRepository userRepository(JdbcTemplate jdbcTemplate) {
return new UserRepository(jdbcTemplate);
}
}
의존성을 주입 받는 UserService 클래스에서 에러 발생하지 않는다.
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Service @Repository 언제 사용? 개발자가 직접 만든 클래스를 스프링 빈으로 등록할 경우 사용한다.
@Configuration + @Bean 조합은 외부 라이브러리나 프레임워크에 만들어져 있는 클래스를 스프링 빈으로 등록할 때 사용
@Component 어노테이션이 주어진 클래스를 '컴포넌트'라고 간주하고, 이 클래스들은 스프링 서버가 뜰 때 자동으로 감지된다.
언제 사용? 컨트롤러, 서비스, 리포지토리가 모두 아닌 추가적인 클래스를 스프링 빈으로 등록할 때 종종 사용
스프링 빈을 주입 받는 방법?
1. 생성자를 통해서 주입 받는 방법이 권장 됨.
@RestController
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
}
2. setter와 @Autowired를 사용하는 방법
-누군가 임으로 주입이 오작동 가능성 있음
@RestController
public class UserController {
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
}
3. 필드에 직접 @Autowired 사용
@RestController
public class UserController {
@Autowired
private UserService userService;
}
@Qualifier ?
@Primary 어노테이션이 없는 상황에서 주입받는 쪽에서 특정 스프링 빈을 선택할 수 있게 해준다.
*@Qualifer > @Primary 어노테이션이 우선 순위가 더 높다.
@RestController
public class UserController {
private final UserService userService;
private final FruitService fruitService;
public UserController(UserService userService, @Qualifier("appleService") FruitService fruitService) {
this.userService = userService;
this.fruitService = fruitService;
}
}
public interface FruitService {
}
@Service
public class AppleService implements FruitService{
}
@Qualifier 어노테이션은 스프링 빈을 사용하는 쪽과 스프링 빈을 등록하는 쪽 모두 사용할 수 있다
@RestController
public class UserController {
private final UserService userService;
private final FruitService fruitService;
public UserController(UserService userService, @Qualifier("main") FruitService fruitService) {
this.userService = userService;
this.fruitService = fruitService;
}
}
@Service
@Qualifier("main")
public class BananaService implements FruitService{
}
'Java > Spring-boot' 카테고리의 다른 글
[토비_스프링부트] #3 DI와 테스트, 애노테이션 활용 (0) | 2024.01.02 |
---|---|
[스프링]스프링 컨테이너 (0) | 2023.12.27 |
[스프링+DB]Spring에서 Database 접근하기 (0) | 2023.12.26 |
[스프링부트] 프로젝트 초기 기본 설정 (0) | 2023.02.05 |
스프링부트_JPA_데이터베이스_에러 (0) | 2020.01.05 |