Spring 중간 점검 실습
[ 2010.6.15 Spring 중간 점검 실습 ]
실습을 위해 'spring_di_basic2'이름으로 Spring Project를 생성한다.
생성된 Spring 프로젝트에서 속성을 눌러 아래와 같이 Spring API들을 추가하여 준다.
(기존 실습 중 사용자 추가 라이브러리 참조)
di.vo Package 아래에 PersonVO와 AddressVO를 생성한다.
PersonVO.java
package di.vo;
public class PersonVO {
private String id;
private String name;
private int age;
private AddressVO address;
public PersonVO(){}
public static PersonVO getInstance(){
return new PersonVO("홍길동",20);
}
public PersonVO(AddressVO address){
this.address=address;
}
public PersonVO(String id, String name, int age){
this.id=id;
this.name=name;
this.age=age;
}
public PersonVO(String name,int age){
this.name=name;
this.age=age;
}
public PersonVO(String id, String name, int age, AddressVO address) {
super();
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public PersonVO(String name){this.name=name;}
public PersonVO(int age){this.age=age;}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public AddressVO getAddress() {
return address;
}
public void setAddress(AddressVO address) {
this.address = address;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age
+ ", address=" + address + "]";
}
}
AddressVO.java
package di.vo;
public class PersonVO {
private String id;
private String name;
private int age;
private AddressVO address;
public PersonVO(){}
public static PersonVO getInstance(){
return new PersonVO("홍길동",20);
}
public PersonVO(AddressVO address){
this.address=address;
}
public PersonVO(String id, String name, int age){
this.id=id;
this.name=name;
this.age=age;
}
public PersonVO(String name,int age){
this.name=name;
this.age=age;
}
public PersonVO(String id, String name, int age, AddressVO address) {
super();
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public PersonVO(String name){this.name=name;}
public PersonVO(int age){this.age=age;}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public AddressVO getAddress() {
return address;
}
public void setAddress(AddressVO address) {
this.address = address;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age
+ ", address=" + address + "]";
}
}
di.dao 패키지에 DAO라는 이름의 Interface를 생성하고, 이를 implements 하는 OracleDAO와 MySQLDAO를 생성한다.
di.dao.DAO
package di.dao;
import java.sql.SQLException;
import di.vo.PersonVO;
public interface DAO {
public void insert(PersonVO pvo) throws SQLException;
public void delete(String id) throws SQLException;
public PersonVO selectById(String id) throws SQLException;
}
OracleDAO.java
package di.dao;
import java.sql.SQLException;
import di.vo.PersonVO;
public class OracleDAO implements DAO {
private String url;
private String user;
private String pwd;
public OracleDAO(String driver, String url, String user, String pwd) {
try {
Class.forName(driver);// driver loading
} catch (Exception ex) {
ex.printStackTrace();
}
this.url = url;
this.user = user;
this.pwd = pwd;
}
@Override
public void delete(String id) throws SQLException {
System.out.println("-------------------------");
getConnection();
System.out.println("OracleDAO.delete()");
System.out.println(id+" 사람을 삭제 했습니다.");
System.out.println("-------------------------");
}
@Override
public void insert(PersonVO pvo) throws SQLException {
System.out.println("-------------------------");
getConnection();
System.out.println("OracleDAO.dinsert()");
System.out.println(pvo+" 등록 처리 했습니다.");
System.out.println("-------------------------");
}
@Override
public PersonVO selectById(String id) throws SQLException {
System.out.println("-------------------------");
getConnection();
System.out.println("OracleDAO.delete()");
System.out.println(id+" 로 조회 했습니다.");
System.out.println("-------------------------");
PersonVO pvo = new PersonVO();
pvo.setId(id);
return null;
}
public void getConnection(){
System.out.println(url+","+user+","+pwd+","+"로 Connection 연결");
}
}
MySQLDAO.java
package di.dao;
import java.sql.SQLException;
import di.vo.PersonVO;
public class MySQLDAO implements DAO {
private String url;
private String user;
private String pwd;
public MySQLDAO(String driver, String url, String user, String pwd) {
System.out.println("driver로딩처리 : "+driver);
this.url = url;
this.user = user;
this.pwd = pwd;
}
@Override
public void delete(String id) throws SQLException {
System.out.println("-------------------------");
getConnection();
System.out.println("MySQLDAO.delete()");
System.out.println(id+" 사람을 삭제 했습니다.");
System.out.println("-------------------------");
}
@Override
public void insert(PersonVO pvo) throws SQLException {
System.out.println("-------------------------");
getConnection();
System.out.println("OracleDAO.dinsert()");
System.out.println(pvo+" 등록 처리 했습니다.");
System.out.println("-------------------------");
}
@Override
public PersonVO selectById(String id) throws SQLException {
System.out.println("-------------------------");
getConnection();
System.out.println("OracleDAO.delete()");
System.out.println(id+" 로 조회 했습니다.");
System.out.println("-------------------------");
PersonVO pvo = new PersonVO();
pvo.setId(id);
return null;
}
public void getConnection(){
System.out.println(url+","+user+","+pwd+","+"로 Connection 연결");
}
}
이제 spring bean configuration file인 daoContext.xml을 아래와 같이 생성한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean name="dao" class="di.dao.OracleDAO">
<constructor-arg value="oracle.jdbc.driver.OracleDriver"/>
<constructor-arg value="jdbc:oracle:thin:@192.168.78.100:1521:XE"/>
<constructor-arg value="hr"/>
<constructor-arg value="hr"/>
</bean>
<bean name="dao2" class="di.dao.MySQLDAO">
<constructor-arg value="org.gjt.mm.mysql.Driver"/>
<constructor-arg value="jdbc:mysql//192.168.78.100:3306/test"/>
<constructor-arg value="scott"/>
<constructor-arg value="tiger"/>
</bean>
<bean name="service" class="di.service.PersonManager">
<property name="DAO" ref="dao"></property>
</bean>
</beans>
위에서 생성한 DAO들을 Control하게 될 PersonManager.java를 생성한다.
package di.service;
import di.dao.DAO;
import di.vo.PersonVO;
public class PersonManager {
private DAO dao;
public void setDAO(DAO dao) {
this.dao = dao;
}
public void register(PersonVO pvo) throws Exception {
System.out.println("PersonManager.register() 실행");
PersonVO p = dao.selectById(pvo.getId());
if (p != null) {
// 중복처리
return;
}
dao.insert(pvo);
}
}
이제 실습을 위한 di.main.TestDAO.java 을 생성한다.
package di.main;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import di.service.PersonManager;
import di.vo.PersonVO;
public class TestDAO {
public static void main(String[] args) throws Exception {
Resource resource = new ClassPathResource("daoContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
PersonManager pm = (PersonManager) factory.getBean("service");
PersonVO pvo = new PersonVO("abc", "김태희", 20);
pm.register(pvo);
}
}
실습결과 :
PersonManager.register() 실행
-------------------------
jdbc:oracle:thin:@192.168.78.100:1521:XE,hr,hr,로 Connection 연결
OracleDAO.delete()
abc 로 조회 했습니다.
-------------------------
-------------------------
jdbc:oracle:thin:@192.168.78.100:1521:XE,hr,hr,로 Connection 연결
OracleDAO.dinsert()
Person [id=abc, name=김태희, age=20, address=null] 등록 처리 했습니다.
-------------------------