설정파일에서 객체를 전달하는 방법: 생성자 방식, setter 메서드 방식
1) 테이블 DbTable.java
package com.model.di.exam02;
public class DbTable {
@Override
public String toString() {
return "테이블에 레코드 삽입 성공";
}
}
2) DAO에서 DbTable을 불러와 insert 메서드를 구현하는 DaoImpl.java
package com.model.di.exam02;
public class DaoImpl {
public void insert(DbTable table) {
System.out.println("DaoImple.insert() 메서드 실행");
System.out.println(table);
}
}
4) 서비스 영역을 묘사한 ServiceImpl.java
package com.model.di.exam02;
public class ServiceImpl implements Service {
private DaoImpl daoImpl;
public ServiceImpl(DaoImpl daoImpl) {
this.daoImpl = daoImpl; // daoImpl 객체를 초기화하는 기능을 생성자로 정의
} // daoImpl 타입의 객체를 입력으로 받게끔 정의함
/*
Dao 영역의 insert를 서비스 영역에서 호출하기 위해 객체를 호출하려면 new로 생성하지 않고
생성자 호출할 때 스프링이 생성한 daoImpl도 넣어달라고 요청해야 함.
설정파일 xml에서 service를 bean 정의시 daoImpl는 ref로 받는다고 표시해줘야 함.
*/
public void write(DbTable article) {
System.out.println("ServiceImpl.write() 메서드 실행");
daoImpl.insert(article);
// 기존 MVC 패턴의 dao 호출을 간단하게 구현
// dao 파트의 객체를 전달받아 write라는 메서드를 통해 insert라는 메서드를 호출.
}
}
5) 설정 파일 applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="messageBean" class="com.model.di.exam01.MessageBean"></bean>
<!-- 생성자를 통해 객체를 전달하는 경우: bean의 자식태그로 constructor-arg 사용 -->
<bean id="service" class="com.model.di.exam02.ServiceImpl">
<!-- ServiceImpl 생성자 호출할 때 daoImpl 객체를 입력으로 받아오므로 아래와 같이 해야함 -->
<constructor-arg>
<ref bean="daoImpl" />
<!-- 스프링이 생성한 아래의 daoImpl 객체를 serviceImple에 레퍼런스로 전달 -->
</constructor-arg>
</bean>
<!-- setter 메서드를 통해 객체를 전달하는 경우: bean의 자식태그로 property 사용 -->
<bean id="service2" class="com.model.di.exam03.ServiceImplement">
<property name="daoImpl"><ref bean="daoImpl" /></property> 직접 자식태그로 ref를 사용하는 경우
<!-- <property name="daoImpl" ref="daoImpl" /> 프로퍼티 태그 안에 property와 ref를 사용하는 경우 -->
</bean>
// property의 name은 자바빈의 setter 메서드 (프로퍼티 이름)
// ref는 아래에 호출해서 불러올 property의 name (빈 객체 이름)
<bean id="table" class="com.model.di.exam02.DbTable"></bean>
<bean id="daoImpl" class="com.model.di.exam02.DaoImpl"></bean>
</beans>
6) 실행을 위한 Main.java
package com.model.di.exam02;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.model.di.exam01.MessageBean;
public class Main {
public static void main(String[] args) {
AbstractApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
context.registerShutdownHook();
DbTable table = (DbTable)context.getBean("table");
// DaoImpl daoImpl = (DaoImpl)context.getBean("daoImpl");
// daoImpl.insert(table);
Service service = (Service) context.getBean("service"); // Service는 인터페이스명
service.write(table);
context.close();
}
}
7) 실행 결과
ServiceImpl.write() 메서드 실행
DaoImple.insert() 메서드 실행
테이블에 레코드 삽입 성공
' Spring Framework' 카테고리의 다른 글
생성자를 이용하여 자료를 전달 (constructor-arg) (0) | 2016.03.28 |
---|---|
스키마 p(namespaces)를 이용한 값 전달 (0) | 2016.03.28 |
IoC 실습 (0) | 2016.03.24 |
Dependency Injection (의존성 주입) (0) | 2016.03.24 |
STS에서 메이븐 방식으로 스프링 프로젝트 생성 (0) | 2016.03.24 |