IOC (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를 검사할 수 있음
'공부노트 > Spring' 카테고리의 다른 글
[ Spring ] @RequestMapping 대신 @PostMapping @GetMapping 쓰는 이유 (0) | 2022.01.13 |
---|---|
[Spring]@Autowired과 @Qualifier 어노테이션 (0) | 2021.12.22 |
Spring MVC 프로젝트의 기본 구조 (0) | 2021.12.21 |
[Spring] 스프링(Spring)의 개념과 Spring MVC (0) | 2021.12.18 |
[Spring] Bean 등록하기 (0) | 2021.12.14 |