Inversion of Control
: 의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법
-> 개발자들의 의견을 받아 처음에는 xml 기반으로 객체를 빈으로 등록하였지만 현재는 구글 guice에서 사용한 어노테이션 기반의 Bean등록 방법이 선호됨
-> BeanFactory Interface가 등록된 빈들을 관리함
1. Spring Bean에 대한 구분
Bean으로 등록되지 않은 객체
package main;
public class repo1 implements repo{
private int a;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public void pr()
{
System.out.println(a);
}
}
: 일반적인 자바 객체일뿐 빈으로 등록되지 않음
Bean에 등록된 객체
@Service
public class repo2 implements repo{
private int a;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public void pr()
{
System.out.println(a);
}
}
:Service 어노테이션으로 Bean에 등록됨
2. Bean으로 등록하는 이유
@Service
public class repo1{
@Autowired
repo2 rp2;
public void pr()
{
rp2.setA(1);
rp2.pr();
}
}
1. 위와 같이 객체를 생성하기 위함 실제로 new를 사용하여 객체를 생성하지 않고 Spring IOC에 미리 생성된 빈을 가져다 쓰는 방식을 통해 의존성 관리
2. 기본적으로 객체가 싱글톤으로 생성되어 Ioc 컨테이너가 관리하게 됨 객체를 효율적으로 관리가 가능함 ( 항상 같은 객체를 사용하여 메모리를 적게 사용하며 런타임에서도 성능최적화에 유리->싱글톤의 장점)
3. 객체의 라이프사이클을 관리하기 용이함 (인터페이스를 지원)
=>postconstruct 어노테이션 등 객체가 생성,소멸 될때의 동작을 추가하거나 미리 생성되기 이전에 Field를 검사할 수 있음
'Tools > Spring' 카테고리의 다른 글
스프링 AOP 적용 예제 (0) | 2021.02.28 |
---|---|
스프링 AOP 기본 동작 원리 (0) | 2021.02.27 |
Component와 Component Scan (0) | 2020.08.09 |
ApplicationContext-2 (Autowired) (0) | 2020.08.06 |
ApplicationContext-1 (Bean을 등록하는 방법) (0) | 2020.08.04 |