[Spring]2. Spring DI - xml파일을 이용한 DI

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





'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

[Spring]4. scope  (0) 2013.10.21
[Spring]3. Spring DI - @(어노테이션)을 이용한 DI  (0) 2013.10.21
[Spring] 1. Spring DI  (0) 2013.10.21
XML 이란?  (0) 2013.10.21
Spring  (0) 2013.10.18

댓글()