스프링 -1

김정현·2024년 7월 5일
0

Spring

목록 보기
1/14
post-thumbnail

1. 스프링 프레임워크

(Spring Framework)

객체 관리가 핵심

1) 의존 주입(Dependency Inject : DI) 지원

2) AOP(Aspect-Oriented Programming) 지원

-관점 지향 프로그래밍 / 관점 - 개발자의 공통적인 처리 부분
-프록시(proxy) : 대신하다, 대리하다.

3) MVC 웹 프레임워크 제공

spring-webmvc

4) JDBC, JPA 연동, 선언적 트랜잭션 처리 등 DB 연동 지원 / Spring Data

JPA(Java Persistence API - ORM 표준 설계)

5) 스프링 데이터, 스프링 시큐리티 - 인증(로그인), 인가(통제), 스프링 배치

2. 스프링 프로젝트 생성하기

spring-context 의존성

spring6
-JDK 컴파일 버전 17

3. 스프링은 객체 컨테이너

  • IoC - Inversion Of Control : 제어의 역전
    - 개발자가 해야되는 객체의 관리 -> 스프링 컨테이너가 대신 수행

  • 다양한 방식으로 객체 관리
    1) 싱글톤 방식으로 객체를 관리

스프링 DI 설정 및 사용

  1. 스프링을 이용한 객체 조립과 사용
  2. DI 방식1 : 생성자 방식
  3. DI 방식2 : 세터 메서드 방식
  4. @Configuration
  5. @Bean
  6. 두 개 이상의 설정 파일 사용하기

1) 생성자 매개변수

AnnotationConfigApplicationContext(Class<?> ...componentClasses)
AnnotationConfigApplicationContext(String... basePackages)

2) @Import
설정 클래스에서 다른 설정 클래스를 포함시킬때

의존 자동 주입

1. @Autowired

-의존성을 주입해야되는 객체임을 알려주는 애노테이션

1) 멤버 변수 위에 정의
2) setter 메서드 위에 정의
3) Optional 정의된 멤버 변수, 메서드의 매개변수에 있어도 주입
4) 자동 스캔 적용(@ComponentScan)시
-@Autowired 미 적용 방식
-생성자의 매개변수로 정의 / 기본 생성자가 정의 되지 않아야 한다.

// lombok 사용

//NonNull도 가능

2. 일치하는 빈이 없는 경우

3. @Qualifier : 한정자

: 빈의 이름을 직접 지정

4. 빈 이름과 기본 한정자

@Bean : 메서드 명
@Qualifier : 변경한 이름
클래스명 (자동 스캔의 경우) -> 앞 첫문자는 소문자
예) class JoinService -> joinService

5. @Autowired 애노테이션의 필수 여부

  • required :
    true - 기본 값, 주입 받는 객체는 반드시 스프링 컨테이너에 생성되어 있어야 한다. -없으면 예외 발생

false - 주입받는 객체 X -> setter 메서드 호출 X, 의존성 주입 X

  • required : true
    -없을 수 있는 주입 받는 객체 @Nullable 애노테이션을 적용해도 필수 여부 해제...
    -메서드 호출 O, 없는 의존성에 null을 대입

컴포넌트 스캔

  1. @Component

  2. @ComponentScan
    -스프링 컨테이너가 자동으로 스캔할 패키지 범위 설정

  3. 기본 스캔 대상

@Component
@Service

-특정 기능과 관련된 애노테이션-
@Configuration
@Controller
@RestController
@ControllerAdvice
@RestControllerAdvice
@Aspect

4. 컴포넌트 스캔에 따른 충돌 처리

1) 빈 이름 충돌

-클래스명만 빈의 이름으로 고려
-다른 패키지에 있는 동일한 이름의 클래스가 있으면 충돌

같은 이름이면 충돌 오류

이름 변경해서 충돌 해결

2) 수동 등록한 빈과 충돌

수동 등록이 우선

3) excludeFilters

빈 라이프 사이클과 범위

  1. 컨테이너 초기화 : 빈 객체의 생성, 의존 주입, 초기화

  2. 컨테이너 종료 : 빈 객체의 소멸

  3. 빈 객체의 라이프 사이클
    1) 객체 생성 -> 의존 설정 -> 초기화 -> 소멸
    2) InitializingBean
    3) DisposableBean

  4. 빈 객체의 초기화와 소멸 : 커스텀 메서드
    1) initMethod
    2) destroyMethod

  5. 빈 객체의 생성과 관리 범위
    @Scope

0개의 댓글