데브코스 W4D3
백엔드 데브 코스 중 중요한 개념을 정리하거나 과제 개발 일지를 정리한 공간입니다.
@Bean & @Configuration
- Ioc 컨테이너를 설정하기 위한 설정파일을 설정하고 관리할 빈에 대한 생성 메소드를 구현한다.
- 1의 설정 파일을 이용한 ApplicationContext를 생성한다.
- getBean 메소드를 이용해 빈 객체를 가져와서 사용한다.
@Configuration
public class VoucherContext {
@Bean
VoucherService voucherService() {
return new VoucherService();
}
}
...
public static void main(String[] args) {
ApplicationContext voucherContext = new AnnotationConfigApplicationContext(VoucherContext.class);
VoucherService voucherService = voucherContext.getBean("voucherService",VoucherService.class);
}
@ComponentScan
@Configuration이 붙은 클래스 내부에 직접 빈 객체의 생성에 대한 작성을 하는 과정을 편리하게 개선한 기능으로 @Configuration이 붙은 클래스에 추가로 @ComponentScan을 붙이게 되면 해당 클래스와 동일 패키지인 파일들 중 스트레오 타입의 아노테이션이 붙은 클래스를 자동으로 스캔하고 빈으로 등록해준다.
+ @Service, @Repository
모든 빈을 동일시키지 않고 용도에 맞게 스트레오 타입으로 분류해놓은 것으로 해당 아노테이션이 달린 객체는 자동으로 빈 객체로 등록시켜준다.
@Configuration
//Vocher라는 클래스가 있는 위치의 패키지에 대한 컴포넌트 스캔
@ComponentScan(basePackageClasses = {Voucher.class})
public class VoucherContext {
}
...
@Service
public class VoucherService {
private VoucherRepository voucherRepository;
public VoucherService(VoucherRepository voucherRepository) {
this.voucherRepository = voucherRepository;
}
}
@AutoWired
빈 객체가 필요한 의존 객체의 타입에 해당하는 빈을 찾아 주입할 때 사용할 수 있는 어노테이션으로 객체 내 생성자, Setter, 필드에 사용할 수 있지만 다음과 같은 이유로 생성자 기반 의존 관계 주입을 선호한다고 한다. (단일 생성자인 경우 생략 가능)
- 초기화시에 필요한 모든 의존관계가 형성되기 때문에 안전합니다.
- 서로 빈 객체가 참조하는 순환 참조를 방지할 수 있다.
- 테스트를 쉽게 해줍니다.
- 불변성을 확보합니다.(생성자를 통한 주입을 제외한 나머지는 필드에 대한 final 선언이 불가능)
@Service
public class VoucherService {
//1.필드 주입
@AutoWired
private VoucherRepository voucherRepository;
//2. 생성자 주입
@AutoWired
public VoucherService(VoucherRepository voucherRepository) {
this.voucherRepository = voucherRepository;
}
//3. 수정자 주입
@Autowired
public void setVoucherService(oucherRepository voucherRepository) {
this.voucherRepository = voucherRepository;
}
}
@Primary, @Qualifier
빈 객체가 의존하는 객체가 2개 이상의 동일 객체가 빈으로 등록된 경우
Bean 생성 생명주기 콜백
- @PostConstruct 애노테이션이 적용된 메소드 호출
Class demo {
@PostConstruct
public void func() {
}
}
- Bean이 InitializingBean 인터페이스 구현시 afterPropertiesSet 호출
Class demo implements InitializingBean {
@Override
public void afterPropertiesSet() {
}
}
- @Bean 애노테이션의 initMethod 에 설정한 메소드 호출
@Bean(initMethod = "함수명")
Bean 소멸 생명주기 콜백
- @PreDestory 애노테이션이 적용된 메소드 호출
- Bean이 DisposableBean 인터페이스 구현시 destroy 호출
- @Bean 애노테이션의 destroyMethod 에 설정한 메소드 호출
Bean Scope
기본적으로 싱글톤 스콥을 가지고 공식 문서에서는 6개의 스콥을 가지고 있다.
singleton
: 하나의 빈 정의에 대해 한 개의 인스턴스만 존재한다.prototype
: 하나의 빈 정의에 대해 다수의 인스턴스가 존재할 수 있다.request
: 하나의 HTTP request 생명주기에 대해 한 개의 인스턴스가 존재한다.session
: 하나의 HTTP Session 생명주기에 대해 한 개의 인스턴스가 존재한다.application
: 하나의 ServeletContext 생명주기에 대해 한 개의 인스턴스가 존재한다.websocket
: 하나의 Websocket 생명주기에 대해 한 갱의 인스턴스가 존재한다.
Author And Source
이 문제에 관하여(데브코스 W4D3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@y005/데브코스-W4D3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)