- DI( dependency injection )

 

- 의존관계 주입

의존관계를 간단히 설명하면
A {
    B b;
    b = new B();
    ...
}
A클래스에서 B클래스를 new로 만들어 사용한다.
A클래스와 B클래스는 의존관계가 있다 라고 ..

주입은 외부에서 이런 의존성 관계를 설정하는 것 ..

 

 

주입의 2가지 방법>

1) 생성자를 통한 주입
2) setter메소드로 주입

 

 

 

파일 목록

(1) TestMain.java
(2) MemberDao.java
(3) InsertController.java
(4) ListController.java
(5) test02.xml

 

 

 

 

( Spring 인 경우 S 자가 보인다. )

 

 

(1) TestMain.java

package test.di2;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestMain {
    public static void main(String[] args) {
        String res="test/di2/test02.xml";
        ApplicationContext context = new ClassPathXmlApplicationContext(res);
       
       InsertController insert =(InsertController)context.getBean("insert");
        insert.execute();
       
       ListController list1= (ListController)context.getBean("list1");
        list1.execute();
    }
}

 

 

(2) MemberDao.java
; 간단한 출력 만듬.
; 멤버변수 url 선언.

package test.di2;

public class MemberDao {
    private String url;
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUrl() {
        return url;
    }
    public void insert(String id){
        System.out.println(id + "님을 추가했습니다.");
    }
    public void update(String id){
        System.out.println(id + "님을 수정했습니다.");
    }
    public void delete(String id){
        System.out.println(id + "님을 삭제했습니다.");
    }
    public void getinfo(String id){
        System.out.println(id + "님을 조회했습니다.");
    }
}

 

 

(3) InsertController.java
; setter 를 통한 주입

package test.di2;

public class InsertController {
    private MemberDao dao;
   
    public void setDao(MemberDao dao) {
        this.dao = dao;
    }

   
    public void execute(){
        dao.insert("Hong Jil Dong");
    }
}

 

(4) ListController.java
; 생성자 통한 주입

package test.di2;

public class ListController {
    private MemberDao dao;
   
    public ListController(){}
   
    public ListController(MemberDao dao){
        this.dao = dao;
    }

    public void execute(){       
        dao.getinfo("홍길동");
    }
}

 


(5) test02.xml
; id는 고유한 값.
; name  id의 별칭
; class  Bean클래스 이름.패키지.클래스이름의 완전한 형태
; singleton  기본이 싱글톤
; 자식태그
   생성자 통한주입 <constructor-arg>
    setter 통한 주입  <property>

; 위에 생성된것을 참조할때는 ref
; 일반 변수에 값도 주입

 

<?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-3.1.xsd">

    <!-- 스프링에 주입하기 -->
   
    <!-- MemberDao타입의 dao객체를 만들어라.(스프링은 기본적으로 싱글톤으로 만든다.) -->
   
    <bean id="memdao" class="test.di2.MemberDao">
        <!-- 단순 스트링 값 은 value -->
        <property name="url" value="localhost"/>
    </bean>

   
    <bean id="insert" class="test.di2.InsertController">

         <!-- setter로 객체 주입하기 -->

         <!-- 위에서 만든 것(생성된것)을 참조할때는 ref -->
        <property name="dao" ref="memdao"/>
    </bean>
   
    <bean id="list1" class="test.di2.ListController">
        <!-- 생성자로 객체 주입하기 -->
        <constructor-arg ref="memdao"/>
    </bean>
</beans>

 

 

 

 

 

+ Recent posts