IoC(Inversion of Control)
- 작업을 수행하는 쪽에서 Object를 생성하는 제어 흐름의 개념을 거꾸로 뒤집는다.
- IoC에서는 Object가 자신이 사용할 Object를 생성하거나 선택하지 않는다.
- Object는 자신이 어떻게 생성되고 어떻게 사용되는지 알 수 없다.
- 모든 Object는 제어 권한을 위임받는 특별한 Object에 의해서 만들어지고 사용된다.
IoC 구현 방법
DL(Dependency Lookup) - 의존성 검색
저장소에 저장되어있는 Bean에 접근하기 위해 개발자들이
- 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 Bean을 Lookup하는 것
DI(Dependency Injection) - 의존성 주입
- 각 계층 사이, 각 클래스 사이에 필요로 하는 의존 관계를 컨테이너가 자동으로 연결해주는 것
- 각 클래스 사이의 의존 관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
- DL 사용 시 컨테이너 종속성이 증가하여, 이를 줄이기 위해 DI를 사용
UserBean.java
//Bean클래스
public class UserBean {
//필드는 private
private String name;
private int age;
private boolean male;
//기본생성자를 반드시 갖고 있어야 한다.
public UserBean() {}
public UserBean(String name, int age, boolean male) {
this.name = name;
this.age = age;
this.male = male;
}
//getter, setter 메소드를 가진다. getName() setName() 메소드를 name 프로퍼티(property)라고 한다.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMale() {
return male;
}
public void setMale(boolean male) {
this.male = male;
}
}
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">
<bean id="userBean" class="kr.or.connect.diexam01.UserBean"></bean>
</beans>
bean 태그 하나를 입력했는데 위의 태그는 다음과 같은 의미를 가진다.
UserBean userBean = new UserBean();
ApplivationContext를 이용해서 설정파일을 읽어들여 실행
ApplicationContextExam01.java
package kr.or.connect.diexam01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ApplicationContextExam01 {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
System.out.println("초기화 완료!!");
UserBean userBean = (UserBean)ac.getBean("userBean");
userBean.setName("kim");
System.out.println(userBean.getName());
UserBean userBean2 = (UserBean)ac.getBean("userBean");
if(userBean == userBean2) {
System.out.println("같은 인스턴스입니다.");
}
}
}
실행결과
출처 : https://isstory83.tistory.com/91
'Web developer > Spring' 카테고리의 다른 글
[Spring] MockMVC Test (0) | 2021.08.02 |
---|---|
[Spring] Swagger를 사용하여 Web API 문서화 해보기 (0) | 2021.08.02 |
[Spring] Annotation @정리2 (0) | 2021.04.18 |
[Spring] Annotation @정리1 (0) | 2021.04.18 |
[Spring] DAO와 Mapper의 차이 (0) | 2021.04.18 |
댓글