스프링 di, ioc 예제

rami·2023년 9월 22일
0

Today I Learned

목록 보기
28/34

  1. 인터페이스 생성
package lunch.service;

public interface Eat {
    void eatLunch();
}

  1. 인터페이스 구현 클래스 작성
package lunch.service.impl;

import lunch.service.Eat;

public class Noodle implements Eat {
    @Override
    public void eatLunch() {
        System.out.println("국수를 먹습니다.");
    }
}
package lunch.service.impl;

import lunch.service.Eat;

public class Rice implements Eat {
    @Override
    public void eatLunch() {
        System.out.println("쌀밥을 먹습니다.");
    }
}

  1. Spring Framework의 IoC (Inversion of Control) 컨테이너에서 Bean으로 관리되는 클래스 작성
package lunch;

import lunch.service.Eat;

public class Lunch {

    private Eat eat;

    public void setEat(Eat eat) {
        this.eat = eat;
    }

    public void haveLunch() {
        eat.eatLunch();
    }

}

setEat 메서드를 통해 Eat 인터페이스를 주입받고, haveLunch 메서드를 호출하여 Eat 인터페이스의 구현체를 사용합니다.


  1. 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="noodle" class="lunch.service.impl.Noodle"></bean>
    <bean id="rice" class="lunch.service.impl.Rice"></bean>
    <bean id="lunch" class="lunch.Lunch">
        <property name="eat" ref="rice"></property>
    </bean>
</beans>

xml의 ref="rice"를 -> ref="noodle"로 수정하면
실행문이 '국수를 먹습니다'로 바뀝니다.

  1. 실행시킬 메인 클래스 작성
package lunch;

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

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("config/app.xml");
        Lunch lunch = (Lunch) context.getBean("lunch");
        lunch.haveLunch();
    }
}
profile
앞으로 나아가는 사람

0개의 댓글