Spring IoC/DI 컨테이너(xml파일을 이용한 설정2)
- Spring IoC/DI 컨테이너(xml파일을 이용한 설정1) 에서 이어짐
- Directory Tree
- Engine.java 생성
package kr.or.connect.diexam01;
public class Engine {
public Engine() {
System.out.println("Engine 생성자");
}
public void exec() {
System.out.println("엔진이 동작합니다.");
}
}
- Car.java 생성
package kr.or.connect.diexam01;
public class Car {
private Engine v8;
public Car() {
System.out.println("Car 생성자");
}
public void setEngine(Engine e) {
this.v8 = e;
}
public void run() {
System.out.println("엔진을 이용하여 달립니다.");
v8.exec();
}
// public static void main(String[] args) {
// Engine e = new Engine();
// Car c = new Car();
// c.setEngine(e);
// c.run();
// }
}
- applicationContext.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">
<!-- spring 컨테이너한테 내가 생성할 객체를 대신 생성하게 하려고 한다. 이를 위해 bean으로 정보를 전달한다.
spring 컨테이너는 이런 객체를 1개만 갖고 있다. 이를 싱글턴 패턴이라고 한다.
UserBean userBean = new UserBean();와 같은 의미 -->
<bean id ="userBean" class="kr.or.connect.diexam01.UserBean"/>
<!-- Engine e = new Engine();와 같은 의미 -->
<bean id = "e" class="kr.or.connect.diexam01.Engine"/>
<!-- Car c = new Car();와 같은 의미 -->
<bean id = "c" class="kr.or.connect.diexam01.Car">
<!-- Car 인스턴스에 Engine을 set하려면 property를 추가해야 한다. -->
<!-- c.setEngine(e);와 같은 의미 -->
<property name="engine" ref="e"></property>
</bean>
</beans>
- ApplicationContextExam02.java 생성
package kr.or.connect.diexam01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ApplicationContextExam02 {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
/* Car객체에 Engine객체가 주입되어 run을 사용하는 것을 볼 수 있다.
* 이처럼 객체에 객체를 주입하는 것을 DI라고 한다.
*/
Car car = (Car)ac.getBean("c");
car.run();
}
}
- 결과
생각해 보기
- Spring 컨테이너가 관리하는 객체를 빈(Bean)이라고 한다.
(직접 new연산자로 생성해서 사용하는 객체는 빈(Bean)이라고 말하지 않는다.) - Spring은 빈을 생성할 때 기본적으로 싱글톤(Singleton)객체로 생성한다.
- 싱글톤이란 메모리에 하나만 생성한다는 것입니다.
- 메모리에 하나만 생성되었을 경우, 해당 객체를 동시에 이용한다면 어떤 문제가 발생할 수 있을까?
- 이런 문제를 해결하려면 어떻게 해야할까?
(참고로 Spring에서 빈을 생성할 때 스코프(scope)를 줄 수 있다. 스코프를 줌으로써 기본으로 설정된 싱글톤 외에도 다른 방법으로 객체를 생성할 수 있다.)
Author And Source
이 문제에 관하여(Spring IoC/DI 컨테이너(xml파일을 이용한 설정2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@oyeon/Spring-IoCDI-컨테이너xml파일을-이용한-설정2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)