티스토리 뷰
0. Bean 간의 관계 설정
:: 두 Bean 간의 관계를 설정하여 다른 객체 책임을 위임 가능
:: has-A 관계. Bean 간의 관계 설정
:: 두 Bean 간의 관계를 설정하여 다른 객체 책임을 위임 가능
:: has-A 관계(포함 관계)
0.1 Wiring
:: 객체 간의 의존성을 명시적으로 설정
:: 빈을 생성하는 메서드를 직접 노출하여 빈을 연결
:: 생성자 주입 or 세터 주입 방식
Ex)
// 의존하는 객체
public class MyRepository {
public void save() {
System.out.println("Data saved!");
}
}
// 의존하는 객체를 사용하는 클래스
public class MyService {
private MyRepository myRepository;
// 생성자 주입 방식으로 명시적 연결
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
public void performAction() {
myRepository.save();
}
}
// 스프링 설정 파일
@Configuration
public class AppConfig {
@Bean
public MyRepository myRepository() {
return new MyRepository();
}
@Bean
public MyService myService() {
return new MyService(myRepository()); // 명시적으로 연결
}
}
EX)
1. 생성자 주입 (Constructor Injection)
:: 보통 이걸로 생성
:: 생성자를 통해 의존성을 주입
:: 객체가 생성될 때, 필수적인 의존성을 강제로 주입 -> immutable object 생성에 유리
- 장점 1) 순환 참조를 컴파일 시 방지 - 참조 여부를 객체 생성 전에 인지
- 장점 2) Final 적용 가능 - Bean의 불변성 보장
// private final 직접 정의
@Controller
@RequestMapping("/users")
@RequiredArgsConstructor
public class UserController {
private final UserServiceInterface userService;
// @FieldDefaults로 간접 정의
@Controller
@RequestMapping("/users")
@RequiredArgsConstructor
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public class UserController {
UserServiceInterface userService;
0.2 Auto-Wiring
:: 스프링이 의존성을 자동으로 추론 및 주입
:: 스프링에서 제공하는메서드 매개변수를 이용하여 값을 제공하도록 활성화
:: @Autowired 어노테이션 사용 -> 순환 참조가 나타날 수 있음
@Autowired
:: 특정 필드에 부여하면 IoC컨테이너 안에 존재하는 특정 필드와 같은 타입의 Bean을 찾아 자동으로 주입
EX)
// 의존하는 객체
public class MyRepository {
public void save() {
System.out.println("Data saved!");
}
}
// 의존하는 객체를 사용하는 클래스
public class MyService {
private MyRepository myRepository;
// 자동 주입 방식으로 의존성 주입
@Autowired
public void setMyRepository(MyRepository myRepository) {
this.myRepository = myRepository;
}
public void performAction() {
myRepository.save();
}
}
// 스프링 설정 파일
@Configuration
@ComponentScan(basePackages = "com.example") // 스캔할 패키지 지정
public class AppConfig {
// 빈 자동 등록: @ComponentScan을 통해 클래스들 자동 스캔
}
Ex)
2. 필드 주입 (Property Injection)
:: @Autowired 어노테이션 사용
:: 객체가 생성 시, 모든 의존성을 넣지 않아도 될 때(선택적 의존성 주입)
@Controller
@RequestMapping("/users")
public class UserController {
@Autowired
private UserServiceInterface userService;
3. 수정자 주입 ((Setter) Method Injection)
:: @Autowired 어노테이션 사용
:: "2. 필드 주입"의 일종으로 setter 메서드를 사용하여 의존성을 주입
:: 선택적 의존성 주입을 허용 -> null 상태의 객체가 될 가능성 존재
@Controller
@RequestMapping("/users")
public class UserController {
private UserServiceInterface userService;
@Autowired
public void setUserService(UserServiceInterface userService) {
this.userService = userService;
}
참고
ASAC 수업자료
'정리용 > SpringBoot' 카테고리의 다른 글
[Spring] 5. Spring - @Controller (0) | 2025.02.19 |
---|---|
[Spring] 4. 3-Layered Architecture Pattern (0) | 2025.02.19 |
[Spring] 3. SpringContext - Bean 등록 (1) | 2025.02.19 |
[Spring] 3. Spring Context (0) | 2025.02.19 |
[Spring] 2-2-2. Spring MVC - Servlet 객체 / FrontController (0) | 2025.02.07 |
- Total
- Today
- Yesterday
- acac
- useLayoutEffect
- git
- useCallback
- asac#asac7기
- asac7#asac
- useState
- ASAC
- ssh
- useRef
- acas#acas7기
- useMemo
- useContext
- useReducer
- useEffect
- react
- memo
- asac7기
- asac7
- Nginx
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |