알아볼 내용
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: 이 친구를 통해 classpath를 app-Context.xml
로 쓰겠다! 라고
위치를 지정해주면 스프링 컨테이너(IOC컨테이너)가 만들어진다.
AbstractApplicationContext : 컨택스트를 생성하는 인터페이스
getBean : app-Context.xml
에 지정된 bean id에서 뽑아오겠다 라는 의미이다.
MyCalculator.class는 해당클래스를 나타낸다.
즉, 설정파일.xml로 위치를 지정해주고
AbstractApplicationContext라는 인터페이스를 통해서 저장한 파일을 ctx에 담고
getBean을 통해서 xml에 있는 클래스와 해당 정보를 담는 것