- xml설정파일을 이용하는 방법..
- 자바에서 클래스를 추가할 때 import를 하는것 처럼 태그를 추가할 때 xml설정 파일에도 스키마로 네임스페이스를 추가하여야 한다.
- Dao 인터페이스와 그 것을 구현한 OracleDao.
1
2
3
4
5
6
7
8
9
10
11 |
public interface Dao {
public void getList();
}
//인터페이스 구현을 통해 OracleDao를 만든다.
public class OracleDao implements Dao{
@Override
public void getList(){
System.out.println("OracleDao.getList() - Oracle DB에 접근합니다.");
}
}
|
- Service인터페이스와 구현한 OracleService. Dao에 의존성이 있기 때문에 멤버로 Dao를 가지고 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
public interface Service {
public void getList();
}
//역시 service또한 인터페이스 구현으로 만든다.
public class OracleService implements Service{
Dao dao;
@Override
public void getList(){
System.out.println("OracleService.getList() - OracleDao.GetList() 를 호출합니다.");
dao.getList();
System.out.println("OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.");
}
@Override
public void setDao(Dao dao) {
this.dao = dao;
}
} |
- Service를 가지고 있는 Coltroller.
1
2
3
4
5
6
7
8
9
10
11
12
13 |
public class ListController {
private Service service;
public void setService(Service service) {
this.service = service;
}
public void doGet(){
System.out.println("Controller - OracleService를 호출합니다.");
service.getList();
System.out.println("Controller - Service에서 데이터를 받아 View에 넘겨줍니다.");
}
} |
- Controller를 호출할 메인 메소드.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
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;
public class testMain {
public static void main(String[] args) {
Resource resource = new ClassPathResource("apllicationContext.xml");
BeanFactory bf = new XmlBeanFactory(resource);
ListController c = (ListController) bf.getBean("listController");
System.out.println("Controller를 호출합니다.");
c.doGet();
}
} |
- 예상 결과
Controller를 호출합니다.
Controller - OracleService를 호출합니다.
OracleService.getList() - OracleDao.GetList() 를 호출합니다
OracleDao.getList() - Oracle DB에 접근합니다
OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.
Controller - Service에서 데이터를 받아 View에 넘겨줍니다
|
- 이것을 실행 시키기 위해서는 설정된 xml파일이 필요하다.
- 위의 세 클래스(controller, service, dao)를 이와 같이 등록한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 |
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<bean id="oracleDao" class="com.OracleDao" >
</bean>
<bean id="oracleService" class="com.OracleService" >
<property name="dao">
<ref bean="oracleDao"/>
</property>
</bean>
<bean id="listController" class="com.ListController" >
<property name="service">
<ref bean="oracleService"/>
</property>
</bean>
</beans> |
- Bean은 객체이다. Spring DI는 모든 등록된 클래스를 프로젝트를 처음 실행할때 전부 객채로 생성한다. 객체가 다른 객체를 필요로 할 때, 필요로 하는 객체를 생성자나 setter를 통해 주입시켜준다.
- xml파일에 <constructor-arg>를 이용하여 생성자를 이용한 DI도 가능하다.
- autowire속성으로 자동으로 의존성 주입이 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13 |
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="service"
class="wakeup.di.service.Service">
</bean>
<bean id="listController"
class="wakeup.di.controller.ListController"
autowire="byType">
</bean>
</beans>
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
<bean id="oracleDao" class="com.OracleDao" >
</bean>
<bean id="oracleService" class="com.OracleService" >
<property name="dao">
<ref bean="oracleDao"/>
</property>
</bean>
<bean id="listController" class="com.ListController" >
<property name="service">
<ref bean="oracleService"/>
</property>
</bean> |
- 다음과 같다.
1
2
3
4
5
6
7
8
9
10 |
//xml파일의 id속성은 객체변수명이 되고, class는 클래스명이다.
OracleDao oracleDao = new OracleDao();
//property name은 멤버 Dao변수를 뜻하고, ref는 그 필드에 들어갈 객체이다.
OracleService oracleService = new OracleService();
oracleService.setDao(oracleDao);
//controller도 마찬가지.
ListController listController = new ListController();
listController.setOracleService(oracleService);
|
|