[Spring의 필요성]
: 우선 눈에 익도록 반복해서 볼 필요가 있는 구조
ConfigurableApplicationContext 인터페이스를 상속받은 수많은 클래스들
String configLocation = "classpath:applicationContext.xml";
AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation);
ctx로 파싱할 때는 AbstractApplicationContext를 이용하고
xml파일을 담을 때는 GenericXmlApplicationContext를 이용하는 구나 하고 가볍게 넘어가면 된다.
- Spring을 사용 했을 때
Calculcator.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class Calculcator { public void add(int firstNum, int secondNum) { System.out.println("add = " + (firstNum + secondNum)); } public void sub(int firstNum, int secondNum) { System.out.println("sub = " + (firstNum - secondNum)); } public void mul(int firstNum, int secondNum) { System.out.println("mul = " + (firstNum * secondNum)); } public void div(int firstNum, int secondNum) { System.out.println("div = " + (firstNum / secondNum)); } } | cs |
MyCalculator.java
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | public class MyCalculator { Calculcator calculator; private int firstNum; private int secondNum; public Calculcator getCalculator() { return calculator; } public void setCalculator(Calculcator calculator) { this.calculator = calculator; } public int getFirstNum() { return firstNum; } public void setFirstNum(int firstNum) { this.firstNum = firstNum; } public int getSecondNum() { return secondNum; } public void setSecondNum(int secondNum) { this.secondNum = secondNum; } public void plus() { calculator.add(firstNum, secondNum); } public void substract() { calculator.sub(firstNum, secondNum); } public void multiply() { calculator.mul(firstNum, secondNum); } public void divide() { calculator.div(firstNum, secondNum); } } | cs |
*
Calculcator와 MyCalculator는 앞선 예제와 동일하다.
MainClass.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public static void main(String[] args) { String configLocation = "classpath:applicationContext.xml"; AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation); MyCalculator myCalulator = ctx.getBean("myCalculator", MyCalculator.class); myCalulator.plus(); myCalulator.substract(); myCalulator.multiply(); myCalulator.divide(); ctx.close(); } } | cs |
*
configLocation : 이 친구를 통해 classpath를 applicationContext.xml로 쓰겠다! 라고
위치를 지정해주면 스프링 컨테이너(IOC컨테이너)가 만들어진다.
AbstractApplicationContext : 컨택스트를 생성하는 인터페이스
getBean : applicationContext.xml에 지정된 bean id에서 뽑아오겠다 라는 의미이다.
MyCalculator.class는 해당클래스를 나타낸다.
*
즉, 설정파일.xml로 위치를 지정해주고
AbstractApplicationContext라는 인터페이스를 통해서 저장한 파일을 ctx에 담고
getBean을 통해서 xml에 있는 클래스와 해당 정보를 담는 것
applicationContext.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?xml version="1.0" encoding="UTF-8"?> xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="calculator" class="com.yul.ex03_di.Calculcator"/> <bean id="myCalculator" class="com.codeWriter.ex03_di.MyCalculator"> <property name="calculator" ref="calculator"/> <property name="firstNum" value="10"/> <property name="secondNum" value="2"/> </bean> </beans> | cs |
*
xml을 통해 매핑할 때는 차례대로 student의 생성자 or setter에 맞게 쓰면 된다.
bean : class를 한 뭉텡이를 지정한 뭉텡이라고 해야할까
id : 클래스 이름
class : 해당 클래스 주소
property : setter로 만들어진 이들을 이렇게 표현한다. MyCalculator에 세가지 객체가
setter로 지정되어있는 것을 볼 수 있다.
ref : 무엇을 참조하는지 - MyCalculator의 Calculcator calculator를 이렇게 표현한다.
Spring의 필요성?
자바는 털 끝하나 건드릴 필요없이 xml만 수정하면 되기 때문에 부품을 생성하고 조립하는데 편리하다.
당장 길이가 짧은 예제로는 와닿지 않아도 대형 프로젝트나 개인 프로젝트를 할 때
MainClass를 수정하지 않아도 되는 편리함이 좋다고 하니 일단 그렇다고 해두자.
'프로그래밍 > Spring' 카테고리의 다른 글
Spring / DI 사용의 장점 (0) | 2018.04.07 |
---|---|
Spring / 직접 or 참조 DI설정 (0) | 2018.04.07 |
Spring / constructor-arg를 통한 의존주입 (0) | 2018.04.07 |
Spring / xml 매핑하기 (0) | 2018.04.07 |
Spring의 필요성 / Spring을 사용하지 않을 때 (0) | 2018.04.07 |