JAVA 의 Class 상속 / Interface 를 이용한 추상화를 기반으로 하는 개발 방법.
Spring은 아래 DI/IoC 를 강력하게 지원하는 프레임워크

IoC : Inversion of Control
프로그램을 제어하는 패턴 중 하나.
DI 는 IoC패턴의 구현방법 중 하나.
DI에 따라 프로그램의 흐름이 완전히 변경됨.
전반적인 객체를 생성해놓고 관리하는 곳
왜 ioc container라고 부르는가?
박스안에 프로그램이 시작될때 미리 프로그램을 생성해놓는다.
new ~~로 생성하는게 아닌 객체를 불러서 사용?
대표적인 클래스 application-context

DI : Dependency Injection (의존성주입)
스프링 Container 에 만들어둔 각종 클래스(bean)들은 서로 의존적이다
A객체가 B객체 없이 동작이 불가능한 상황



DI 설정방법
2가지 의존성 주입 방법
1. 생성자를 통한 의존성 주입
객체를 집어넣어줄 때 사용하는 속성 ref
<constructor-arg ref="빈id"></constructor-arg>
예시 )


2. setter를 통한 의존성 주입
<property name="멤버변수" value="값"/>
<property name="변수명" ref="객체(빈 id)"/>
예시 )


예시 )
생성자/ stter를 통한 의존객체 주입
Car.java ( 생성자 주입 )
package ex04;
public class Car {
private IBattery battery;
//생성자 주입
public Car(IBattery battery) {
this.battery = battery;
}
//getter
public IBattery getBattery() {
return battery;
}
}
Airplane.java ( setter 주입 )
package ex04;
public class Airplane {
private IBattery battery;
public IBattery getBattery() {
return battery;
}
//세터 주입
public void setBattery(IBattery battery) {
this.battery = battery;
}
}
Battery1 , Battery2 .java
package ex04;
public class Battery1 implements IBattery{
@Override
public void energy() {
System.out.println("에너자이저");
}
}
public class Battery2 implements IBattery{
@Override
public void energy() {
System.out.println("노랑색건전지");
}
}
context.xml
<!-- car는 생성자를 통한 주입, airplane은 setter를 통한 주입 -->
<bean id="battery1" class="ex04.Battery1" />
<bean id="battery2" class="ex04.Battery2"></bean>
<bean id="airplane" class="ex04.Airplane">
<property name="battery" ref="battery1"></property>
</bean>
<bean id="car" class="ex04.Car">
<constructor-arg ref="battery2"></constructor-arg>
</bean>
MainClass.java
package ex04;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
// Car, Airplane 빈을 생성하고, 의존성 주입
// 각 객체 안에 있는 배터리를 자바클래스에서 출력.
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("application-context.xml");
Car car = ctx.getBean(Car.class);
Airplane airplane = ctx.getBean(Airplane.class);
car.getBattery().energy();
airplane.getBattery().energy();
}
}'Spring' 카테고리의 다른 글
| 스프링 MVC 객체구현 (@Controller) -(3) (0) | 2023.02.02 |
|---|---|
| 스프링 MVC 객체구현 (@Controller) -(2) (0) | 2023.02.01 |
| 스프링 MVC 객체구현 (@Controller) -(1) (2) | 2023.02.01 |
| JSP에 스프링 조립하기 (0) | 2023.01.31 |
| 스프링 개발환경구축 (0) | 2023.01.30 |