SPRING January 09, 2021

spring-04 Collection 활용(2)

Words count 6k Reading time 5 mins.

알아볼 내용

app-context 가 두개 있는경우

app-context가 두개가 있는 경우 그리고 porperty 태그를 대신할수 있는 p속성에 대해 알아봅시다

예제

Car.java

package com.koreait.spring;

public class Person {

    // field
    private String name;
    private Car myCar;

    // constructor
    public Person() {

    }

    // method
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Car getMyCar() {
        return myCar;
    }
    public void setMyCar(Car myCar) {
        this.myCar = myCar;
    }
    public void personInfo() {
        System.out.println("이름: " + name);
        myCar.carInfo();
    }

}

personInfo() 부분을 잘 살펴보자

Person.java

package com.koreait.spring;

public class Person {

    // field
    private String name;
    private Car myCar;

    // constructor
    public Person() {

    }

    // method
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Car getMyCar() {
        return myCar;
    }
    public void setMyCar(Car myCar) {
        this.myCar = myCar;
    }
    public void personInfo() {
        System.out.println("이름: " + name);
        myCar.carInfo();
    }
}

기본 Java 방법

MainClass.java

package com.koreait.spring;

public class MainClass {

    public static void main(String[] args) {

        Car car = new Car();
        car.setModel("520d");
        car.setPrice(7000);
        car.carInfo();

        Person person = new Person();
        person.setName("제임스");
        person.setMyCar(car);

        person.personInfo();

    }
}

Spring 방법

app-context1.xml

Namespaces 탭에서 p 속성을 선택해서 <property>태그를 대신 사용한다.

Car 과 Person을 분리해서 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"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- app-context1.xml 에서는 Car만 만들었습니다. -->

    <!--
        원래 디폴트 생성자 + setter
        <bean id="객체명" class="클래스명">
            <property name="필드명" value="값" />
        </bean>

        Namespaces 탭에서 p 속성을 선택하면 아래와 같이 바꿀 수 있어요.
        <bean id="객체명" class="클래스명" p:필드명="값" />
    -->

    <!--
        Car car = new Car();
        car.setModel("520d");
        car.setPrice(7000);
    -->
    <bean id="car" class="com.koreait.spring.Car" p:model="520d" p:price="7000" />

</beans>

app-context2.xml

<!-- app-context2.xml 에서는 Person만 생성합니다. -->

    <!--
        Person person = new Person();
        person.setName("제임스");
        person.setMyCar(car);
    -->
    <bean id="person" class="com.koreait.spring.Person" p:name="제임스" p:myCar-ref="car" />
</beans>

SpringMainClass.java

package com.koreait.spring;
public class SpringMainClass {

    public static void main(String[] args) {
        String resourceLocation1 = "classpath:app-context1.xml";
        String resourceLocation2 = "classpath:app-context2.xml";

        AbstractApplicationContext ctx = new GenericXmlApplicationContext(resourceLocation1, resourceLocation2);

        Person p = ctx.getBean("person", Person.class);

        // "person" 은 app-Context2.xml 의 bean id
        p.personInfo();

        ctx.close();    
    }

}

AbstractApplicationContext ctx = new GenericXmlApplicationContext(resourceLocation1, resourceLocation2); 부분 중요

결과화면

resuouceLocation: 이 친구를 통해 classpathapp-Context.xml 로 쓰겠다! 라고

위치를 지정해주면 스프링 컨테이너(IOC컨테이너)가 만들어진다.

AbstractApplicationContext : 컨택스트를 생성하는 인터페이스

getBean : app-Context.xml에 지정된 bean id에서 뽑아오겠다 라는 의미이다.

MyCalculator.class는 해당클래스를 나타낸다.

즉, 설정파일.xml로 위치를 지정해주고
AbstractApplicationContext라는 인터페이스를 통해서 저장한 파일을 ctx에 담고
getBean을 통해서 xml에 있는 클래스와 해당 정보를 담는 것

0%