Inversion of Control 이라고도 하는 의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법(new 연산자를 이용해서 객체를 생성하는 것)
객체 간의 높은 결합도를 갖게 되면 이후 수정 사항이 생겼을 때 같이 수정해줘야할 부분들이 매우 많아져서, 프로그램의 규모가 커졌을 때는 감당하기 힘든 수준이 된다.
그래서 Spring에서는 객체 간의 관계 설정을 클래스 내부에서 직접 하는 방식 대신, Spring Container를 이용하여 외부에서 객체를 생성하고, 객체를 주입해주는 방식, 즉 의존성 주입의 방식을 사용한다.

인터페이스 생성
package kr.co.di;
public interface IHello {
//interface : 추상 메소드만 올수 있다.
// 추상메소드: 함수의 본체가 없다
public void sayHello(String name);
}
자바 메소드 생성
package kr.co.di;
public class MessageKO implements IHello {
//내 클래스의 부모가 인터페이스 상속 : implements
public MessageKO() {
System.out.println("MessageKO 호출됨");
}
@Override
public void sayHello(String name) {
System.out.println("안녕하세요"+name+"님");
}
}
package kr.co.di;
public class HelloPOJO {
public static void main(String[] args) {
IHello hello=null;
hello= new MessageKO();
hello.sayHello("손흥민");
}
}
출력 결과 확인

xml파일 생성-bean 등록
<?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.xml -->
<!--스프링빈 등록 -->
<bean id="msgEN" class="kr.co.di.MessageEN"></bean>
</beans>
결과 출력
package kr.co.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class HelloSpringbean {
public static void main(String[] args) {
// 스프링 빈
ApplicationContext context=new ClassPathXmlApplicationContext("springbean.xml");
IHello hello=null;
hello=(IHello)context.getBean("msgEN");
hello.sayHello("TOM");
}
}
