springboot study (basic ~ mvc ~ jpa, spring data jpa)
assertions.assertThat(a).isSameAs(b) : a와 b의 주소값 비교 (싱글톤 패턴 테스트 시)
assertions.assertThat(a).isNotSameAs(b)
assertions.asserThat(a).isInstanceOf(b.class) : a 객체가 b 클래스의 인스턴스 인지 확인
assertions.assertThat(a).isEqualTo(b) : a와 b의 비교 (값, 인스턴스)
Assertions.assertThrows(NoSuchBeanDefinitionException.class, ()-> ac.getBean(MemberService.class) );
public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems){
Order order = new Order();
order.setMember(member);
order.setDelivery(delivery);
for (OrderItem orderItem : orderItems) {
order.addOrderItem(orderItem);
}
order.setStatus(OrderStatus.ORDER);
order.setOrderDate(LocalDateTime.now());
return order;
}
- 생성자 패턴에 비해 가독성이 좋다. (생성자의 경우 이름을 지정할 수 없습니다)
- 호출할때마다 새로운 객체를 생성할 필요가 없다.
- 하위 자료형 객체를 반환할 수 있다.
//클래스 A의 하위 클래스 B,C
public static A hello(){
if ~
return new B();
else if ~
return new C();
return new A();
}
- Lombok 사용시 편하게 생성 가능
@RequiredArgsConstructor(staticName = "hello")
@Component
- 개발자가 직접 작성한 클래스를 bean 등록하고자 할 경우 사용
@Configuration + @Bean
- 외부라이브러리 또는 내장 클래스를 bean으로 등록하고자 할 경우 사용.
- 1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 @Configuraton을 명시
- 어플리케이션 공통 로직 처리
- ex) servlet filter, spring interceptor