개발/SPRING & JPA

[Spring-Core] IoC Containers

Leedo1982 2021. 4. 14. 20:35

Spring IoC container 은 스프링 프레임워크의 핵심입니다. container 는 object 를 만들고, 연결하고, 구성하고, 생성부터 파괴까지 전체 life cycle 를 관리합니다. Spring container 은 DI(dependency injection)를 사용하여 애플리케이션을 구성하는 component 를 관리합니다.

 

Spring 는 두가지 유형의 containers 를 제공합니다.

1. BeanFactory container

2. ApplicationContext container

 

추가적으로 읽을거리(howtodoinjava.com/spring-core/spring-ioc-vs-di/)

 

1. BeanFactory 

BeanFactory 는 기본적으로 다른 bean 과 그들의 의존성의 등록을 유지하는 향상된 factory 능력을 위한 인터페이스에 지나지 않는다. BeanFactory 를 통해 빈정의를 읽고 빈 팩토리를 사용하여 액세스 할 수 있다.

1.1 How to create BeanFactory 

BeanFactory를 사용할 때 하나를 생성하고, bean 정의의 일부를 읽을 수 있다. 

InputStream is = new FileInputStream("beans.xml");
BeanFactory factory = new XmlBeanFactory(is);

//Get bean
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");

또다른 방법은 아래와 같다. 

Resource resource = new FileSystemResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
 
ClassPathResource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);

기본적으로 이게 전부 입니다. getBesn(String) 을 사용하여 Bean 의 인스턴스를 검색 할 수 있다.  

클라이언트 측에서 보기에 BeanFactory 는 놀랍도록 간단하다.

 

1.2 BeanFactory method

BeanFactory 인터페이스는 클라이언트 코드에서 호출된 메소드가  6개 뿐입니다.

1. boolean containsBean(String) : BeanFactory  에 지정된 이름과 일치하는 Bean 정의 또는 인스턴스가 포함된경우 true 를 리턴

2. Object getBean(String): 주어진 이름으로 등록된 bean 의 인스턴스를 반환합니다. 구성에서 Bean 을 구성한 방법에 따라 BeanFactory 는 싱글톤이나 그러한 공유 인스턴스 또는 새로 생성된 bean을 리턴한다. BeansException 은 찾을수 없을 때 반환되거나 Bean 을 인스턴스화 화고 준지하는 동안 예외가 발생할 때 발생한다.

3. Object getBean(String, Class): 주어진 이름으로 등록된 Bean을 반환합니다. 반환된 Bean 은 주어진 Class 로 캐스팅 됩니다. Bean 을 캐스팅 할 수 없는경우 BeanNotOfRequiredTypeException 가 발생한다. 또한 getBean(String) 의 규칙이 적용된다.

4. Class getType(String):  주어진 이름의 Bean 의 Class 가 반환된다.  만약 빈을 찾을수 없으면 NoSuchBeanDefinitionException 가 발생한다.

5. boolean isSingleton(String): 주어진 이름으로 등록된 Bean 정의 또는 Bean 인스턴스가 싱글톤인지 여부를 판별합니다. 해당 Bean을 찾을 수 없으면 NoSuchBeanDefinitionException 이 발생한다.

6. String[] getAliases(String): 빈정의에 정의된 경우 주어진 Bean 이름에 대한 별칭을 반환합니다.

 

2. ApplicationContext

applicationContext containers 는 속성 파일에서 텍스트 메세지를 확인하는 기능 및 관심있는 이벤트리스너에 응용프로그램 이벤트를 게시하는 기능과 같은 엔터프라이즈 특정 기능이 추가된다. 이 container 은 org.springframework.context.ApplicationContext interface 로 정의된다.

 

ApplicationContext 에는 BeanFactory의 모든 기능이 포함되므로, 일반적으로 BeanFactory 보다 권장된다. BeanFactory 는 모바일기기나 애플릿 기반 애플리케이션 같은 경량 애플리케이션에서 사용할 수 있다.

 

2.1 Types of ApplicationContext

가장 일반적인 ApplicationContext 의 구현체는 다음과 같다.

1. FileSystemXmlApplicationContext - 이 컨테이너는 XML 파일에서 Bean의 정의를 로드합니다. 여기에서 생성자에 XML Bean 구성파일의 전체 경로를 제공해야 합니다.

2. ClassPathXmlApplicationContext - 이 컨테이너는 XML 파일에서 Bean 의 정으를 로드 합니다. 여기서는 XML 의 파일 전체경로를 제고할 필요는 없지만 CLASSPATH 를 올바르게 설정해야합니다.

3. WebXmlApplicationContext - 이 컨테이너는 웹 애플리케이션 내에서 모든 Bean 의 정의가 있는 XML 파일을 로드합니다.

 

2.2 How to create ApplicationContext

ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");

 

 

 

 

 

 

 

 

 

 

 

 

 

[참고] howtodoinjava.com/spring-core/different-spring-ioc-containers/