DI 확인하기
DI, 의존성 주입 확인하기
- Car와 Engine이라는 두개의 클래스를 생성한다.
1. spring 사용 x
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 {
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();
}
}
- spring을 사용하지 않는다면 우리는 Engine와 Car 클래스를 구현하고 new를 사용하여 객체를 생성한 후에야 해당 인스턴스를 사용할 수 있다.
- spring ioc 컨테이너가 이 역할을 해줄 수 있고 그러기 위해서는 해당 bean들을 먼저 등록해야한다.
2. Spring 사용 O
applicationContext.xml에 해당 코드 추가
<bean id="e" class="kr.or.connect.diexam01.Engine"/>
<bean id="c" class="kr.or.connect.diexam01.Car">
<property name="engine" ref="e"></property>
</bean>
- 프로퍼티는 setter, getter 메서드 중에 하나를 의미한다. 즉, name이 engine인 property는 setEngine, getEngine을 의미한다.
- 하지만 bean 태그 내에서는 값을 설정하는 것이기 때문에 setEngime을 의미한다. 파라미터로는 Engine 타입인 e를 받는 것이다.
- 이처럼 어떤 객체에게 객체를 주입하는 것을 DI라고 한다.
ApplicationContextExam02.java
public class ApplicationContextExam02 {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext(
"classpath:applicationContext.xml");
Car car = (Car)ac.getBean("car");
car.run();
}
}
- 실행클래스의 코드에는 엔진이 없다. 우리는 car만 사용할 줄 알면 된다.
- 스프링 버전이 올라가면서 빈대신 더 편리한 자바 config와 어노테이션을 사용한다.
Author And Source
이 문제에 관하여(DI 확인하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@doforme/DI-확인하기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
package kr.or.connect.diexam01;
public class Engine {
public Engine() {
System.out.println("Engine 생성자");
}
public void exec() {
System.out.println("엔진이 동작합니다.");
}
}
package kr.or.connect.diexam01;
public class Car {
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();
}
}
<bean id="e" class="kr.or.connect.diexam01.Engine"/>
<bean id="c" class="kr.or.connect.diexam01.Car">
<property name="engine" ref="e"></property>
</bean>
public class ApplicationContextExam02 {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext(
"classpath:applicationContext.xml");
Car car = (Car)ac.getBean("car");
car.run();
}
}
Author And Source
이 문제에 관하여(DI 확인하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@doforme/DI-확인하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)