개발/Spring

[Spring] 스프링 코어 정리 2 - 어노테이션

TutleKing 2022. 10. 31. 13:00

스프링 DI 방법 중 

  • XML
  • Annotation 
  • JAVA 

 

@Required

  • 반드시 의존성이 주입되어야함을 강제 하는 어노테이션

 

@Autowired 

  • 주입 방법
  • required 속성 : 해당하는 객체가 스프링 컨테이너에 없으면 에러 
  • 타입이 같은 스프링 빈이 2개인 경우 : primary 속성 사용 가능

 

@Qualifier

  • 스프링 빈의 이름을 지정해서 의존성 주입 

 

@Value 

  • 외부속성을 주입하기 위해 사용 : 프로퍼티스 파일 내용 사용
  • 환경별로 문자열이 달라질 수 도 있는 경우가 있으니 자주 사용  

 

Annotation의 장점

  • XML 보다 간결한 코드로 설정 가능
  • Java 코드와 동일하게 구성 가능 

단점

  • 스프링 프레임워크에 의존성이 생겨버린다

 

 

Spring JavaConfig 클래스 사용 

  • @Configuration  어노테이션 사용 

 

 

AnnotationConfigApplicationContext

  • 생성자 파라미터 

 

Bean Lifecycle 설정 가능

  • @Bean(initMethod = “init“, destroyMethod=“cleanup” )
  • destroyMethod는 암묵적으로 스프링 빈에 public 으로 close나 shutdown 이라는 메소드 가 있으면 그냥 동작시켜버림

 

Bean Scope

  • 기본 : 싱글톤 
  • 프로토 타입으로 설정 가능 

 

Bean Naming , Aliasing

  • 변경 가능 -> 근데 바꾸지않는게 좋음 

 

 

Bean Dependency

  • 같은 Config 파일
  • 다른 Config 파일(@Autowired)

 

@Conditional 

  • 스트링 부트의 핵심
  • @Configuration 이나 @Bean 의 동작 여부를 정할 수 있음 
  • 실행하는 조건?? 
  • @Profile 이 왜 대표적인 예시인가?
  • 자주쓰지는 않지만 “이런 상황에는 쓰고 이런 상황에는 쓰지마라”
  • 외부 라이브러리의 클래스를 사용하고싶지않고 내가 직접 만든거롤 사용하고 싶을때 사용하는편

 

 

@Bean Scanning

  • Component Scanning = Classpath Scanning

 

 

Bean Scanning의 대상 

  • @Configuration
  • @Component
  • @Controller
  • @Service
  • @Repository

 

Component Scan - filter

  • includeFilters : 포함 
  • excludeFilters : 제외

 

 

스프링 빈을 만드는 기준

  • 스프링 기능을 사용하는 메소드가 코드에 있는경우 
  • 스프링 빈이랑 의존관계가 있을경우

 

 

AnnotationParser 와 같은 클래스가 어노테이션을 붙여놓은 부분에 대해서 실행을 시켜 줌 

- 어노테이션은 마킹

- 어노테이션을 처리하는 클래스는 따로있다. 

 

 

 

@Primary를 자주 사용하는가? 

  • 사실 타입이 겹치는 상황을 자주 만들지는 않음 (@Profile)
  • Qulifier도 사용할 수 있음
반응형