<aside>
π‘ @Autowired μ΄λ
Έν
μ΄μ
μ Typeμ ν΅ν DIλ₯Ό ν λ μ¬μ©νλ€. μ€νλ§ μ»¨ν
μ΄λκ° μμμ ν΄λΉ νμ
μ Beanμ μ°Ύμμ μ£Όμ
ν΄μ€λ€.
</aside>
μλ μ½λλ ν
μ€νΈμ 곡ν΅μ μΌλ‘ μ¬μ© ν BookDTO, BookDAO, BookDAOImpl ν΄λμ€μ΄λ€.
BookDTO
@Data
@AllArgsConstructor
public class BookDTO {
private int sequence; //λμλ²νΈ
private int isbn; //isbn
private String title; //μ λͺ©
private String author; //μ μ
private String publisher; //μΆνμ¬
private Date createdDate; //μΆνμΌ
}
BookDAO
public interface BookDAO {
/* λμ λͺ©λ‘ μ 체 μ‘°ν */
List<BookDTO> selectBookList();
/* λμ λ²νΈλ‘ λμ μ‘°ν */
BookDTO selectOneBook(int sequence);
}
BookDAOImpl
/* @Repository : @Componentμ μΈλΆν μ΄λ
Έν
μ΄μ
μ ν μ’
λ₯λ‘ DAO νμ
μ κ°μ²΄μ μ¬μ©νλ€. */
@Repository("bookDAO")
public class BookDAOImpl implements BookDAO {
private Map<Integer, BookDTO> bookList;
public BookDAOImpl() {
bookList = new HashMap<>();
bookList.put(1, new BookDTO(1, 123456, "μλ°μ μ μ", "λ¨κΆμ±", "λμ°μΆν", new Date()));
bookList.put(2,
new BookDTO(2, 654321, "μΉμ°¬μ κ³ λλ μΆ€μΆκ² νλ€", "κ³ λ", "κ³ λμΆν", new Date()));
}
@Override
public List<BookDTO> selectBookList() {
return new ArrayList<>(bookList.values());
}
@Override
public BookDTO selectOneBook(int sequence) {
return bookList.get(sequence);
}
}
/* @Service : @Componentμ μΈλΆν μ΄λ
Έν
μ΄μ
μ ν μ’
λ₯λ‘ Service κ³μΈ΅μμ μ¬μ©νλ€. */
@Service("bookServiceField")
public class BookService {
/* BookDAO νμ
μ λΉ κ°μ²΄λ₯Ό μ΄ νλ‘νΌν°μ μλμΌλ‘ μ£Όμ
ν΄μ€λ€. */
@Autowired
private BookDAO bookDAO;
/* λμ λͺ©λ‘ μ 체 μ‘°ν */
public List<BookDTO> selectAllBooks(){
return bookDAO.selectBookList();
}
/* λμ λ²νΈλ‘ λμ μ‘°ν */
public BookDTO searchBookBySequence(int sequence) {
return bookDAO.selectOneBook(sequence);
}
}
private BookDAO bookDAO = new BookDAOImpl(); μ κ°μ΄ νλλ₯Ό μ μΈνλ€λ©΄ BookService ν΄λμ€λ BookDAOImpl ν΄λμ€μ λ³κ²½μ μ§μ μ μΌλ‘ μν₯μ λ°λ κ°ν κ²°ν©μ κ°μ§κ² λλ€. κ°μ²΄κ°μ κ²°ν©μ λμ¨νκ² νκΈ° μν΄ new BookDAOImpl() μ κ°μ μ§μ μ μΌλ‘ κ°μ²΄λ₯Ό μμ±νλ μμ±μ ꡬ문μ μ κ±°νκ³ νλμ @Autowired μ΄λ
Έν
μ΄μ
μ μμ±ν μ μλ€. κ·Έλ¬λ©΄ μ€νλ§ μ»¨ν
μ΄λλ BookService λΉ κ°μ²΄ μμ± μ BookDAO νμ
μ λΉ κ°μ²΄λ₯Ό μ°Ύμ μμ‘΄μ±μ μ£Όμ
ν΄μ€λ€.
μ€νλ§ μ»¨ν
μ΄λλ₯Ό μμ±νμ¬ @Repository, @Service λ±μ μ΄λ
Έν
μ΄μ
μ΄ μμ± λ ν΄λμ€κ° λΉ μ€μΊλμ ν΅ν΄ μ λ±λ‘ λμλμ§, λν κ°μ²΄μ μμ‘΄ κ΄κ³μ λ°λΌ @Autowired μ΄λ
Έν
μ΄μ
μ ν΅ν΄ μμ‘΄μ± μ£Όμ
μ΄ λμλμ§λ₯Ό ν
μ€νΈνλ€.
/* AnnotationConfigApplicationContext μμ±μμ basePackages λ¬Έμμ΄μ μ λ¬νλ©° ApplicationContext μμ±νλ€. */
ApplicationContext context = new AnnotationConfigApplicationContext("com.ohgiraffers.section01");
BookService bookService = context.getBean("bookServiceField", BookService.class);
/* μ 체 λμ λͺ©λ‘ μ‘°ν ν μΆλ ₯ νμΈ */
bookService.selectAllBooks().forEach(System.out::println);
/* λμλ²νΈλ‘ κ²μ ν μΆλ ₯ νμΈ*/
System.out.println(bookService.searchBookBySequence(1));
System.out.println(bookService.searchBookBySequence(2));
/* @Service : @Componentμ μΈλΆν μ΄λ
Έν
μ΄μ
μ ν μ’
λ₯λ‘ Service κ³μΈ΅μμ μ¬μ©νλ€. */
@Service("bookServiceConstructor")
public class BookService {
private final BookDAO bookDAO;
/* BookDAO νμ
μ λΉ κ°μ²΄λ₯Ό μμ±μμ μλμΌλ‘ μ£Όμ
ν΄μ€λ€. */
@Autowired
public BookService(BookDAO bookDAO) {
this.bookDAO = bookDAO;
}
public List<BookDTO> selectAllBooks(){
return bookDAO.selectBookList();
}
public BookDTO searchBookBySequence(int sequence) {
return bookDAO.selectOneBook(sequence);
}
}
μμ±μμλ @Autowired μ΄λ
Έν
μ΄μ
μ μμ±ν μ μλ€. κ·Έλ¬λ©΄ μ€νλ§ μ»¨ν
μ΄λλ BookService λΉ κ°μ²΄ μμ± μ BookDAO νμ
μ λΉ κ°μ²΄λ₯Ό μ°Ύμ μμ‘΄μ±μ μ£Όμ
ν΄μ€λ€.
Spring 4.3 λ²μ μ΄νλ‘λ μμ±μκ° ν κ° λΏμ΄λΌλ©΄ @Autowired μ΄λ
Έν
μ΄μ
μ μλ΅ν΄λ μλμΌλ‘ μμ±μ μ£Όμ
μ΄ λμνλ€. λ¨, μμ±μκ° 1κ° μ΄μμΌ κ²½μ°μλ λͺ
μμ μΌλ‘ μμ±μ ν΄μ£Όμ΄μΌ νλ€. μμ μ½λμ κΈ°λ³Έ μμ±μλ₯Ό μΆκ°λ‘ μμ±νκ³ λ§€κ°λ³μ μμ±μμ @Autowired μ΄λ
Έν
μ΄μ
μ μλ΅νκ² λλ©΄ μμ±μ μ£Όμ
μ΄ λμνμ§ μμ μ€λ₯κ° λ°μνλ€.
μμ±μ μ£Όμ
μ μ₯μ