본문으로 바로가기

3. DI(dependency Injection-1)

category 프로그래밍/spring 2017. 11. 22. 20:39


스프링을 사용하지 않은 프로젝트

package com.javalec.ex;



public class MainClass {


public static void main(String[] args) {

MyCalculator myCalculator = new MyCalculator(); //객체를 생성

myCalculator.setCalculator(new Calculator()); 만약 Calculator가 바뀌면 이름을 또 바꾸어야 하기 때문에 좋은 방법은 아님

MyCalculator는 Calculator클래스에 의존됨

myCalculator.setFirstNum(10); //setter를 이용해 값을 설정

myCalculator.setSecondNum(2);

myCalculator.add();

myCalculator.sub();

myCalculator.mul();

myCalculator.div();

}



package com.javalec.ex;


public class MyCalculator { //setter와 getter를 만든 MyCalculator클래스


Calculator calculator; // Calculator.class를 만들었기 때문에 레퍼런스필드객체로 사용이 가능하다.

private int firstNum;

private int secondNum;

public MyCalculator() {


}


public void add() {

calculator.addition(firstNum, secondNum);

}

public void sub() {

calculator.subtraction(firstNum, secondNum);

}

public void mul() {

calculator.multiplication(firstNum, secondNum);

}

public void div() {

calculator.division(firstNum, secondNum);

}

public void setCalculator(Calculator calculator) {

this.calculator = calculator;

}

public void setFirstNum(int firstNum) {

this.firstNum = firstNum;

}

public void setSecondNum(int secondNum) {

this.secondNum = secondNum;

}

}



package com.javalec.ex;


public class Calculator {  // 가감승제 메소드 탑재


public void addition(int f, int s) {

System.out.println("addition()");

int result = f + s;

System.out.println(f + " + " + s + " = " + result);

}

public void subtraction(int f, int s) {

System.out.println("subtraction()");

int result = f - s;

System.out.println(f + " - " + s + " = " + result);

}

public void multiplication(int f, int s) {

System.out.println("multiplication()");

int result = f * s;

System.out.println(f + " * " + s + " = " + result);

}

public void division(int f, int s) {

System.out.println("division()");

int result = f / s;

System.out.println(f + " / " + s + " = " + result);

}


}





스프링을 사용한 프로젝트


             외부에서 객체를 만들어서 주입하는방법(DI)

public class MainClass {


public static void main(String[] args) {

String configLocation = "classpath:applicationCTX.xml";  // xml의 파일을 스트링형식으로 configLocation변수에 저장

AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation); // xml파일 파싱

MyCalculator myCalculator = ctx.getBean("myCalculator", MyCalculator.class); //외부에서 만들어진 applicationCTX.xml에 저장된 beam값을 얻어온다. 필드에 대한 setter가 반드시 필요하다.


myCalculator.add();

myCalculator.sub();

myCalculator.mul();

myCalculator.div();


}


스프링 설정 파일의 이해



applicationCTX.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">

객체하나하나를 xml파일에서 bean이라고 한다.

<bean id="calculator" class="com.javalec.ex.Calculator" /> //객체생성


                 객체 calculateor id이며 클래스는 com.javalec.ex.Calculator이다.                                 

<bean id="myCalculator" class="com.javalec.ex.MyCalculator"> //객체생성


<property name="calculator">

                                        calculator 필드변수

<ref bean="calculator"/>

</property>    

                   

<property name="firstNum" value="10" />

                                         firstNum 필드변수

<property name="secondNum" value="2"></property>

</bean>


</beans>




java소스-------------> xml소스   setFirstNum을 set을빼고 proproty name="firstNum"으로 바꾸어준다.



'프로그래밍 > spring' 카테고리의 다른 글

스프링 컨테이너 생명 주기  (472) 2017.12.07
5.DI활용(의존 관계, di사용에 따른 장점)  (492) 2017.11.26
4.DI(Dependency Injection)-II  (1162) 2017.11.22
2.스프링 프로젝트 및 DI ,IDC  (1178) 2017.11.21
1.스프링  (1175) 2017.11.20