[Spring / xml 매핑하기]
: BMI지수 구하기를 통해 xml 매핑 배우기
BMICalculator.java
public class BMICalculator { private double lowWeight; private double normal; private double overWeight; private double obesity; // 필드 값 public void bmiCalculator(double weight, double height) { // 몸무게와 키를 매개변수로 갖고 있는 생성자 double h = height * 0.01; double result = weight / (h * h); System.out.println("BMI 지수: " + (int)result); if(result > obesity) { System.out.println("당신 비만이지?"); } else if (result > overWeight) { System.out.println("당신 과체중이지?"); } else if (result > normal) { System.out.println("당신... 정상맞지?"); } else { System.out.println("당신 저체중이지?"); } } public void setLowWeight(double lowWeight) { // 필드에 따른 setter this.lowWeight = lowWeight; } public void setNormal(double normal) { this.normal = normal; } public void setOverWeight(double overWeight) { this.overWeight = overWeight; } public void setObesity(double obesity) { this.obesity = obesity; } } | cs |
*
BMI지수를 구하기 위해서는 공식이 필요하니까
필드를 정해주고 bmiCalculator 메서드를 통해 계산 공식을 넣고 setter를 지정한다.
MyInfo.java
public class MyInfo { private String name; private double height; private double weight; private ArrayList<String> hobbies; // ArrayList형태가 xml에서 어떻게 매핑되는지 유심히 보자. private BMICalculator bmiCalculator; // 계산기 필드를 가지고 있다. public String getName() { // 필드에 따른 setter, getter 정의 return name; } public void setName(String name) { this.name = name; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } public ArrayList<String> getHobbies() { return hobbies; } public void setHobbies(ArrayList<String> hobbies) { this.hobbies = hobbies; } public BMICalculator getBmiCalculator() { return bmiCalculator; } public void setBmiCalculator(BMICalculator bmiCalculator) { this.bmiCalculator = bmiCalculator; } public void getInfo() { // 내 신상정보 메서드 System.out.println("내 이름 : " + name); System.out.println("나의 키 : " + height); System.out.println("내 몸무게 : " + weight); System.out.println("내 취미 : " + hobbies); System.out.println("---------------------------------------"); bmiCalculator(); } private void bmiCalculator() { // BMICalculator객체를 참조하는 bmiCalculator에 접근, bmiCalculator를 소환 bmiCalculator.bmiCalculator(weight, height); } } | cs |
*
나의 정보와 관련된 클래스이다.
ctx_example.xml
<?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="bmiCalculator" class="com.yul.ex02_example.BMICalculator"> <property name="lowWeight" value="18.5"/> <property name="normal" value="23"/> <property name="overWeight" value="25"/> <property name="obesity" value="30"/> </bean> <bean id="myInfo" class="com.yul.ex02_example.MyInfo"> <property name="name" value="yul"/> <property name="height" value="200"/> <property name="weight" value="80"/> // Myinfo에 height, weight가 double형이지만 알아서 박싱처리된다. <property name="hobbies"> <list> <value>런닝</value> <value>프로그래밍</value> <value>노래부르기</value> </list> </property> <property name="bmiCalculator"> <ref bean="bmiCalculator"/> </property> </bean> </beans> | cs |
*
특히 중요한 부분은 xml 매핑이다.
각 클래스의 setter는 값을 달라고 열어놓기만 하는 상태이고
모든 값은 xml에서 해결한다는 것!
bmiCalculator : 4개 필드가 setter형태로 존재하므로 꼭 property로 묶어주고
bmi지수대로 값을 지정해준다는 것
public void bmiCalculator도 신경써야하지 않나? 처음에는 헷갈렸는데
유심히 보면 MyInfo에서 소환하고 있어서 여기서 해결할거니까 신경쓸 것이 없다.
myInfo : 5개의 필드가 setter형태로 존재하므로 property로 묶어주고
중요한 점은 위에서 유심히 보라고 했던 ArrayList<String> hobbies
hobbies는 List타입이라는 인터페이스를 가지고 있으므로 List형태로 묶고 value값을 지정해주면 된다.
또 bmiCalculator는 BMICalculator를 참조한다는 의미로 ref를 써주면 된다.
MainClass .java
public class MainClass { public static void main(String[] args) { String configLocation = "classpath:ctx_example.xml"; AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation); MyInfo myInfo = ctx.getBean("myInfo", MyInfo.class); myInfo.getInfo(); ctx.close(); } } | cs |
*
그러면 classpath:ctx_example.xml로 위치를 지정하고
ctx에 그 값을 넣어주고
Myinfo를 가져와서 getBean에서 뽑아오는 myInfo Bean객체를 넣어주고
내 신상정보 메서드를 소환해서 정하면
결과 값
=========================================
내 이름 : yul
나의 키 : 200.0
내 몸무게 : 80.0
내 취미 : [런닝, 프로그래밍, 노래부르기]
---------------------------------------
BMI 지수: 20
당신 저체중이지?
==========================================
'프로그래밍 > Spring' 카테고리의 다른 글
Spring / DI 사용의 장점 (0) | 2018.04.07 |
---|---|
Spring / 직접 or 참조 DI설정 (0) | 2018.04.07 |
Spring / constructor-arg를 통한 의존주입 (0) | 2018.04.07 |
Spring의 필요성 / Spring을 사용 했을 때 (0) | 2018.04.07 |
Spring의 필요성 / Spring을 사용하지 않을 때 (0) | 2018.04.07 |