Tools/Spring

Spring Ioc 컨테이너와 Bean

칼쵸쵸 2020. 8. 4. 21:44

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