🔥 Vamos/Spring
0116 | 스프링의 정석 :: 3-4 (config.xml 실습)
unikue
2023. 1. 16. 23:35
스프링 DI 활용하기 - 실습
: 앞에서 했던 스프링DI를 가지고 정식으로 실습해본다.
resources 안에 우리가 bean으로 사용할 config.xml파일을 만들어준다.
👉 config.txt에 키와 값을 만들어줬던것처럼 xml파일에도 동일하게 진행하는 것.
class Car{}
class Engine{}
class Door{}
public class SpringDiTest {
public static void main(String[] args){
//xml을 설정파일로 쓰는 application context 생성
ApplicationContext ac = new GenericXmlApplicationContext("config.xml");
//Car car = (Car)ac.getBean("car"); // byName. 아래와 같은 문장
Car car = ac.getBean("car",Car.class); // 이름 뒤에 타입정보를 주면 형변환 생략.
Car car2 = (Car)ac.getBean(Car.class); // byType
Engine engine = (Engine) ac.getBean("engine");
Door door = (Door) ac.getBean("door");
System.out.println("car= "+ car);
System.out.println("car= "+ car2);
System.out.println("engine= " + engine);
System.out.println("door= " + door);
}
}
* 싱글톤 = 클래스 객체를 하나만 생성.
👉 만약 getBean 할 때마다 새 객체가 생기길 원한다면 scope를 prototype으로 지정해주면 된다.
<bean id="car" class="com.fastcampus.ch3.Car" scope="prototype"/>
<bean id="engine" class="com.fastcampus.ch3.Engine" scope="singleton"/> // 기본이 싱글톤
car.setColor("red"); // setter를 추가하고 이용해서 객체 멤버들 초기화
car.setOil(100);
car.setEngine(engine);
car.setDoors(new Door[]{ac.getBean("door", Door.class), ac.getBean("door", Door.class)});
System.out.println("car= "+ car);
---------------------------
// 이렇게 하지않고 xml파일 내에 property를 이용해서 속성값을 줄 수도 있다.
<bean id="car" class="com.fastcampus.ch3.Car">
<property name="color" value="red"/>
<property name="oil" value="100"/>
<property name="engine" ref="engine"/>
<property name="doors">
<array value-type="com.fastcampus.ch3.Door">
<ref bean="door"/>
<ref bean="door"/>
</array>
</property>
</bean>
<bean id="engine" class="com.fastcampus.ch3.Engine"/>
<bean id="door" class="com.fastcampus.ch3.Door" scope="prototype"/>
</beans>
👉 property 태그가 setter 를 사용하므로 setter가 꼭 있어야 한다.