2️⃣ 조회용 샘플 데이터 입력
@PostConstruct
- : 의존성 주입이 이루어진 후 초기화를 수행하는 메소드
- 사용 이유
- 생성자가 호출되었을 때, 빈은 초기화되지 않았다.(의존성 주입이 이루어지지 않음)
- 이때 사용하면 의존성 주입이 끝나고 실행됨이 보장되므로 빈 초기화 걱정할 필요X
- 빈이 여러번 초기화 되는 것을 막을 수 있다.
- 이 애노테이션이 붙은 메소드는 클래스가 service를 수행하기 전에 발생한다.```java @Component public class DbInit { @Autowired private UserRepository userRepository; @PostConstruct private void postConstruct() { User admin = new User("admin", "admin password"); User normalUser = new User("user", "user password"); userRepository.save(admin, normalUser); } } ```
조회용 샘플 데이터 입력
jpabook.jpashop.InitDb
package jpabook.jpashop; import jpabook.jpashop.domain.*; import jpabook.jpashop.domain.Item.Book; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import javax.persistence.EntityManager; @Component @RequiredArgsConstructor public class InitDb { private final InitService initService; @PostConstruct public void init(){ initService.dbInit1(); initService.dbInit2(); **/* dbInit1의 코드를 이곳으로 복붙 하면 안 되는 이유 스프링 라이프 사이클이 존재하여 transactional이 먹히지 않는다 그렇기에 별도의 스프링 빈으로 만들어주어야 한다. */** } @Component @Transactional @RequiredArgsConstructor static class InitService{ private final EntityManager em; public void dbInit1(){ Member member = createMember("userA", "서울", "1", "1111"); em.persist(member); Book book1 = createBook("JPA1 BOOK", 10000, 100); em.persist(book1); Book book2 = createBook("JPA2 BOOK", 20000, 100); em.persist(book2); OrderItem orderItem1= OrderItem.createOrderItem(book1, 10000, 1); OrderItem orderItem2 = OrderItem.createOrderItem(book2, 20000, 2); Delivery delivery = createDelivery(member); Order order = Order.createOrder(member, delivery, orderItem1, orderItem2); em.persist(order); } public void dbInit2(){ Member member = createMember("userB", "진주", "2", "2222"); em.persist(member); Book book1 = createBook("SPRING BOOK1", 20000, 200); em.persist(book1); Book book2 = createBook("SPRING BOOK2", 40000, 300); em.persist(book2); OrderItem orderItem1= OrderItem.createOrderItem(book1, 20000, 3); OrderItem orderItem2 = OrderItem.createOrderItem(book2, 40000, 4); Delivery delivery = createDelivery(member); Order order = Order.createOrder(member, delivery, orderItem1, orderItem2); em.persist(order); } // 단축키 : option + cmd + m private Member createMember(String name, String city, String street, String zipcode) { Member member = new Member(); member.setName(name); member.setAddress(new Address(city, street, zipcode)); return member; } private Delivery createDelivery(Member member) { Delivery delivery = new Delivery(); delivery.setAddress(member.getAddress()); return delivery; } private Book createBook(String name, int price, int stockQuantity) { Book book1 = new Book(); book1.setName(name); book1.setPrice(price); book1.setStockQuantity(stockQuantity); return book1; } } }