엄청 많이 들어봤겠지만 스프링 프레임워크는 의존성 주입(Dependency Injection, DI)을 적용할 수 있는 객체지향 프레임워크이다.
의존성 주입은 객체의 생성과 관계를 효과적으로 분리할 수 있는 방법에 대한 고민으로 나온것이다!
* IoC 란
IoC(Inversion of Control)라는 제어의 역전으로, 인스턴스를 제어하는 주도권이 역전된다는 의미이다. 즉, 메서드나 객체의 호출을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것! (그러니까 우리는 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입함)
*DI 란
DI(Dependency Injection)는 IoC에 포함되는 것으로 IoC를 이루기 위한 디자인 패턴 중 하나이다. 객체를 직접 생성하는 것이 아닌 외부에서 생성 후 주입 시켜주는 것!
과거에는 의존성을 해결하기 위해 컨트롤러에서 직접 서비스 객체를 생성하거나 하나의 객체를 생성해서 활용했는데,
스프링 프레임워크는 XML 설정이나 자바 설정으로 할 수 있다.
*참고: 빈(Bean) : 스프링이 관리하는 객체들
*Application Context: 빈을 관리하는 공간
*@Autowired: 멤버 변수에 주입하는 필드 주입(Field Injection)
*룩업(lookup): DI 컨테이너에서 빈을 가져오는 것
1. XML 설정
스프링 프레임워크는 자체적으로 객체를 생성하고 관리하면서 필요한 곳으로 객체를 주입(inject)한다.
'WEB-INF' 폴더에 New > XML Configuration File > Spring Config 선택 'root-context.xml' 파일 생성
<bean class="com.example.패키지명.폴더명.클래스명"></bean>
ApplicationContext는 'root-context.xml'을 이용해서 스프링이 실행되고 ApplicationContext객체가 생성된다.
2. 자바 설정
자바 클래스에 @Configuration, 메서드에 @Bean 어노테이션을 사용해서 DI 컨테이너에 빈으로 등록한다.
@Bean
UserService userService(UserRepository userRepository, PasswordEncoder passwordEncoder) {
. . .
}
3. 마커 어노테이션(Marker Annotation)
@Component 어노테이션으로 DI 컨테이너에 빈을 자동으로 등록한다. (컴포넌트 스캔)
@Component
public class UserRepositoryImpl implements UserRepository {
. . .
}
*Autowiring : DI 컨테이너가 자동으로 필요로하는 의존 컴포넌트를 주입하는 과정
@Component가 붙은 빈 클래스는 컴포넌트 스캔이 이루어지고, 생성자에 @Autowired가 붙으면 Autowiring이 된다.
'Tech > Spring | Spring Boot' 카테고리의 다른 글
[Spring boot][OAuth2] 소셜 로그인 연동 처리하기 (kakao) (0) | 2024.05.03 |
---|---|
[Spring Security] UserDetailsService/ UserDetails/ 인증(Authentication)/ 인가(Authorization) (0) | 2024.05.02 |
[Spring DB] 트랜잭션 AOP 주의 사항 - 프록시 내부 호출 (0) | 2024.04.13 |
[Lombok] @Cleanup, @All/NoArgsConstructor, @RequiredArgsConstructor (0) | 2024.04.12 |
[SpringBoot] 댓글의 페이징 처리 (인덱스 생성, 페이징 처리) (1) | 2024.04.11 |
댓글