2022-04-06 TIL
7182 단어 diSpring bootbeanSpring boot
프로그래머스 백엔드 데브코스 17일차
SpringBoot Part1
DI(Dependency Injection) 방법
- consturcter base DI
- IoC Container에서 만든 Bean을 다른 Bean에 쓰이도록 한다.
- Circular Reference를 조심해야 한다.
@Component
public class BeanA {
private BeanB b;
public BeanA(BeanB b) {
this.b = b;
}
}
- setter base DI
@Component
public class BeanA {
private BeanB b;
public void setBeanB(BeanB b) {
this.b = b;
}
}
- autowired base DI
@Component
public class BeanA {
@Autowired
private BeanB b
}
Component Scan
- Stereotype Annotation을 이용하여 스캔 대상 지정
- 설정 Class에서 따로 Bean을 등록 하지 않아도 Bean 등록 가능
- @ComponenetScan
@Configuration
@ComponentScan(basePackages = {"org.prgrms.kdt.order", "org.prgrms.kdt.voucher", "org.prgrms.kdt.configuration"})
AutoWired
- 생성자가 2개 이상일 경우 Autowired Annotation으로 명시해줘야함.
Primary
- 같은 인터페이스를 상속받은 빈이 2개 이상 있을 때, 우선순위를 정해줌
Qualifier
- Primary와 비슷하지만 용도에 따라 어떤 Bean을 쓸지 명시할 수 있음
@Qualifier("jdbc")
public TestService(@Qualifier("jdbc") ... ) { ... }
BeanFactoryAnnotationUtils.qualifiedBeanOfType(applicationContext.getBeanFactory(), TestRepository.class, "memory");
Primary, Qualifier ?
- 보통 Primary를 쓰는편
- Qualifier는 정말 필요한 경우에만 사용
Bean Scope
- singleton, prototype, reqeust, session, application, websocket
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class Test { ... }
Bean Lifes Cycle
생성 생명주기 콜백
1. Invoke method @postConstruct with annotated
2. If Bean implements InitializationBean interface, call afterPropertiesSet
3. Invoke method set in initMethod of @Bean.
소멸 생명주기 콜백
1. Invoke method @PreDestroy With annotated
2. If Bean implements DisposableBean interface, call destroy
3. Invoke method set in destroyMethod of @Bean
그외 꿀팁
ConcurrentHashMap
Multi-thread 환경에서 thread safe를 위해 사용함.
Optional.ofNullable
인자값이 null이라면 비어있는 Optional 객체를 반환한다.
@ComponentScan(basePackageClasses, baskPackages, excludeFilters, includeFilters)
클래스별, 패키지별, 스캔에 포함되지 않는 필터, 스캔에 포함되는 필터를 설정 할 수 있다.
Author And Source
이 문제에 관하여(2022-04-06 TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@nnagman/2022-04-06-TIL
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- IoC Container에서 만든 Bean을 다른 Bean에 쓰이도록 한다.
- Circular Reference를 조심해야 한다.
@Component
public class BeanA {
private BeanB b;
public BeanA(BeanB b) {
this.b = b;
}
}
@Component
public class BeanA {
private BeanB b;
public void setBeanB(BeanB b) {
this.b = b;
}
}
@Component
public class BeanA {
@Autowired
private BeanB b
}
@Configuration
@ComponentScan(basePackages = {"org.prgrms.kdt.order", "org.prgrms.kdt.voucher", "org.prgrms.kdt.configuration"})
@Qualifier("jdbc")
public TestService(@Qualifier("jdbc") ... ) { ... }
BeanFactoryAnnotationUtils.qualifiedBeanOfType(applicationContext.getBeanFactory(), TestRepository.class, "memory");
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class Test { ... }
1. Invoke method @postConstruct with annotated
2. If Bean implements InitializationBean interface, call afterPropertiesSet
3. Invoke method set in initMethod of @Bean.
1. Invoke method @PreDestroy With annotated
2. If Bean implements DisposableBean interface, call destroy
3. Invoke method set in destroyMethod of @Bean
Multi-thread 환경에서 thread safe를 위해 사용함.
인자값이 null이라면 비어있는 Optional 객체를 반환한다.
클래스별, 패키지별, 스캔에 포함되지 않는 필터, 스캔에 포함되는 필터를 설정 할 수 있다.
Author And Source
이 문제에 관하여(2022-04-06 TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nnagman/2022-04-06-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)