Hyokyun Yim bio photo

Hyokyun Yim

Koreatech Computer Science Engineering undergraduate 4 grade.

Facebook Github

XML파일을 이용하는 방식이 아닌 Java Class를 사용하여 DI를 수행하는 방식을 구현해 보자.

Overview

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;
	}
	
}