스프링 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도 사용할 수 있음
반응형
'개발 > Spring' 카테고리의 다른 글
[Spring Cache] Spring boot 환경에서 Redis Cache 사용하기 (0) | 2023.02.15 |
---|---|
[Spring] Spring MVC 정리 (0) | 2022.12.23 |
[Spring] 스프링 코어 정리 1 (0) | 2022.10.12 |
[Spring] 스프링 컨테이너의 빈 조회 방법 (0) | 2022.08.25 |
[Spring] 스프링을 사용하는 이유? (0) | 2022.08.25 |