Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- python subprocess
- telegraf
- g++ 업데이트
- subporcess path
- c3 초
- snmp
- 정규식 활용
- grafana dashboard
- InfluxDB
- 1697
- regex_search
- 정규식 컴파일
- 백준
- c3 step graph
- influxdb 설치
- gcc regex
- python os
- snmp test
- 정규식 문자열 출력
- c++ 정규식
- semanage
- c3 second
- selinux port 등록
- gcc 업데이트
- linux시간으로 변경
- python popen
- c3 축 가리기
- c3 축 없애기
- CentOS7
- centos pyhon 설치
Archives
- Today
- Total
리셋 되지 말자
스프링을 통한 의존성 주입-XML 파일 사용 본문
의사 코드
운전자가 종합 쇼핑몰에서 타이어를 구매한다.
운전자가 종합 쇼핑몰에서 자동차를 구매한다.
운전자가 자동차에 타이어를 장착한다.
자바로 표현 - 속성 메서드 사용
ApplicationContext context = new ClassPathXmlApplicationContext("expert002/expert002.xml");
Car car = context.getBean("car", Car.class);
Tire tire = context.getBean("tire", Tire.class);
car.setTire(tire);
소스 코드 - Driver.java를 제외한 파일들은 모두 동일
- Driver.java (기존의 생산과정에서 구매 과정으로 변경됨)
package expert002;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Driver {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("expert002/expert002.xml");
Car car = context.getBean("car", Car.class);
Tire tire = context.getBean("tire", Tire.class);
car.setTire(tire);
System.out.println(car.getTireBrand());
}
}
- expert002.xml (경로 : /src/main/java/expert002/expert002.xml )
xml 생성 : expert002 패키지 위에서 마우스 우클릭 -> New -> Other -> Spring -> Spring Bean Configuration FIle 선택 후 이름 설정
<?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="tire" class="expert002.KoreaTire"></bean>
<bean id="americaTire" class="expert002.AmericaTire"></bean>
<bean id="car" class="expert002.Car"></bean>
</beans>
- 결과
INFO : org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@ea30797: startup date [Mon Aug 10 17:23:45 KST 2020]; root of context hierarchy
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [expert002/expert002.xml]
INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@39fb3ab6: defining beans [tire,americaTire,car]; root of factory hierarchy
장착된 타이어: 코리아 타이어
JUnit 테스트 케이스
- CarTest.java
package expert002;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import expert001_03.AmericaTire;
import expert001_03.Car;
import expert001_03.KoreaTire;
import expert001_03.Tire;
class CarTest {
@Test
void 자동차_코리아타이어_장착_타이어브랜드_테스트() {
Tire tire1 = new KoreaTire();
Car car1 = new Car();
car1.setTire(tire1);
assertEquals("장착된 타이어: 코리아 타이어", car1.getTireBrand());
}
@Test
void 자동차_아메리카타이어_장착_타이어브랜드_테스트() {
Tire tire2 = new AmericaTire();
Car car2 = new Car();
car2.setTire(tire2);
assertEquals("장착된 타이어: 아메리카 타이어", car2.getTireBrand());
}
}
- JUnit 테스트 결과
.xml .java main() 설명
.xml 파일에 bean이라는 상품들을 진열한다. 각 상품을 구분하기 위한 id가 각각 tire, americaTire, car이다.
이때 상품을 어떤 클래스를 통해 생산(인스턴스화) 해야 할지 나타내는 class 속성을 함께 지정한다.
<bean id="tire" class="expert002.KoreaTire"></bean>
<bean id="americaTire" class="expert002.AmericaTire"></bean>
<bean id="car" class="expert002.Car"></bean>
KoreaTire.java가 xml 파일에서 id가 tire인 bean 태그와 연결되어 있고, tire id가 Driver.java의 main() 메서드 안의 코드인
Tire tire = context.getBean("tire", Tire.class);
와 연결되어 있는것을 확인할 수 있다.
KoreaTire라고 하는 상품이 tire라는 이름으로 진열돼 있고, 구매(getBean) 할 수 있다.
결과 화면에서 INFO 세 줄은 내부적으로 스프링 프레임워크를 구축하는 과정에서 보여지는 정보라고 생각하면 된다.
스프링 도입의 장점
- 어떤것도 재컴파일/재배포하지 않아도 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="koreaTire" class="expert002.KoreaTire"></bean>
<bean id="tire" class="expert002.AmericaTire"></bean>
<bean id="car" class="expert002.Car"></bean>
</beans>
- 변경 결과
INFO : org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@ea30797: startup date [Mon Aug 10 17:38:01 KST 2020]; root of context hierarchy
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [expert002/expert002.xml]
INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@39fb3ab6: defining beans [koreaTire,tire,car]; root of factory hierarchy
장착된 타이어: 아메리카 타이어
'Java(폐지) > spring 책' 카테고리의 다른 글
스프링을 통한 의존성 주입 - @Autowired를 통한 속성 주입 (0) | 2020.08.12 |
---|---|
스프링을 통한 의존성 주입-스프링 설정 파일(XML)에서 속성 주입 (0) | 2020.08.12 |
스프링 없이 의존성 주입하기 2 - 속성을 통한 의존성 주입 (0) | 2020.08.06 |
스프링 없이 의존성 주입하기 1 - 생성자를 통한 의존성 주입 (0) | 2020.08.06 |
코드 작성 (0) | 2020.08.06 |
Comments