Kim Hyeong
Spring Framework 실습 - Java Class를 이용한 방식 본문
Spring Framework 실습 - Java Class를 이용한 방식
- Java Class를 이용해 DI를 수행한다.
//Main
package exam_02_03_BookSearch_Java_DI;
import java.util.ArrayList;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import exam_02_03_BookSearch_Java_DI.config.ApplicationContext;
import exam_02_03_BookSearch_Java_DI.dto.BookDTO;
import exam_02_03_BookSearch_Java_DI.service.BookService;
public class Main {
public static void main(String[] args) {
// 1. Spring Container부터 생성
// xml이 아닌 java class파일을 이용해서 설정.
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationContext.class);
BookService service = ctx.getBean("service" , BookService.class);
ArrayList<BookDTO> list = service.findBookByKeyword();
for(BookDTO dto : list)
{
System.out.println(dto.getBtitle() + ", " + dto.getBauthor());
}
}
}
- Annotation 을 사용하여 @Configuration 클래스라는 것을 알리고
- @Bean 의 지정된 메서드를 수행하여 객체를 생성하고 리턴한다.
//Configuration
package exam_02_03_BookSearch_Java_DI.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import exam_02_03_BookSearch_Java_DI.dao.BookDAO;
import exam_02_03_BookSearch_Java_DI.service.BookService;
//Annotation : 특정 작업을 지시해줌.
//@Configuration : 이것은 설정에 관련된 클래스라는것을 Spring에 알려줌.
@Configuration
public class ApplicationContext {
//Spring이 ApplicationContext 클래스를 읽어서 Bean 어노테이션을 찿고
//지정된 메서드를 수행하여 객체를 생성하고 리턴
@Bean
public BookDAO dao()
{
BookDAO dao = new BookDAO();
return dao;
}
@Bean
public BookService service(){
//dao() 를 호출해서 리턴된 객체를 BookService에 넘김
BookService service = new BookService(dao());
service.setKeyword("여행");
return service;
}
}
//Service
package exam_02_03_BookSearch_Java_DI.service;
import java.util.ArrayList;
import exam_02_03_BookSearch_Java_DI.dao.BookDAO;
import exam_02_03_BookSearch_Java_DI.dto.BookDTO;
public class BookService {
private BookDAO dao;
private String keyword;
public BookService(BookDAO dao)
{
this.dao = dao;
}
public void setKeyword(String keyword){
this.keyword = keyword;
}
public ArrayList<BookDTO> findBookByKeyword() {
//DAO가 필요해요
return dao.select(keyword);
}
}
//DAO
package exam_02_03_BookSearch_Java_DI.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import exam_02_03_BookSearch_Java_DI.dto.BookDTO;
public class BookDAO {
public ArrayList<BookDTO> select(String keyword) {
//제네릭을 이용해 BookDTO형 ArrayList만듬
ArrayList<BookDTO> list = new ArrayList<BookDTO>();
try{
//1. 드라이버 로딩
//자바프로그램이 MySQL에 접근하기 위해서 필요한 라이브러리를 불러들인다.
//pom.xml 에 MySQL에 대한 dependency를 입력해서 라이브러리를 다운로드 받는다.
Class.forName("com.mysql.jdbc.Driver");
//2. 실제 데이터베이스에 접속
//어떤 데이터베이스에 접속할 건지, 아이디와 패스워드가 필요
String url = "jdbc:mysql://localhost:3306/library";
String id = "root";
String pw = "cps431";
Connection con = DriverManager.getConnection(url,id,pw);
//3. SQL문을 실행하기 위한 Statement를 생성한다.
String sql ="select btitle,bauthor from book where btitle like ?";
PreparedStatement pstmt = con.prepareStatement(sql);
//sql문에 내가 원하는 문자열을 넣는 작업
//첫번째 물음표에 , keyword를 넣는다.
//% 와일드문자는 0개이상의 문자를 의미한다. 즉 keyword를 포함하고 있는 문자열을 ?에 넣는다.
pstmt.setString(1,"%"+ keyword + "%");
//4. Statement 실행!!
//수행한 쿼리문의 결과를 가져옴
//rs 는 테이블 라인을 가리키는 포인터. 한칸씩 내려가면서 라인을 가리킴
ResultSet rs = pstmt.executeQuery();
//5. 결과처리
//여기서 얻은 데이터를 어떻게 해서든 Controller 까지 전달하여 출력
//DTO가 책 1권에 대한 데이터를 담을 수 있으니까.. DTO를 여러개 만들어서 결과로 나온 여러권의 책을 담아서
//Controller에게 전달한다!!
while(rs.next())
{
//한 책에대한 정보가 담긴 rs를 dto에 때려박음
BookDTO dto = new BookDTO();
dto.setBtitle(rs.getString("btitle"));
//dto.setBisbn(rs.getString("bisbn"));
//dto.setBprice( rs.getInt("bprice") );
dto.setBauthor(rs.getString("bauthor"));
//한권의 책정보 dto를 리스트에 넣음
list.add(dto);
}
//6. 사용한 리소스 정리
rs.close();
pstmt.close();
con.close();
}catch(Exception e){
//만약 오류가 생기면 오류 출력
System.out.println(e);
}
return list;
}
}
//DTO
package exam_02_03_BookSearch_Java_DI.dto;
public class BookDTO {
private String btitle;
private String bauthor;
public String getBtitle() {
return btitle;
}
public void setBtitle(String btitle) {
this.btitle = btitle;
}
public String getBauthor() {
return bauthor;
}
public void setBauthor(String bauthor) {
this.bauthor = bauthor;
}
}
'Spring' 카테고리의 다른 글
스프링 MVC 흐름과 주요 구성 컴포넌트 (0) | 2018.08.16 |
---|---|
Spring Framework의 기본적인 개념 (0) | 2018.08.10 |
DI의 Life Cycle (0) | 2018.08.10 |
지금까지 배운 DI 와 IoC 정리 (0) | 2018.08.10 |
Spring Framework 실습 - XML을 이용한 방식 (1) | 2018.08.10 |
Comments