02. IoC & Container
728x90

Container

IoC Container

 - 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당
 - 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있어 IoC라고 부름
 - 이런 이유로 스프링 컨테이너를 IoC 컨테이너라고 부르기도 함
 - 스프링에서 IoC를 담당하는 컨테이너에는 BeanFactory, ApplicationContext가 있음

 - 컨테이너 초기화 -> 빈 객체의 생성, 의존 주입, 초기화

 - 컨테이너 종료 -> 빈 객체의 소멸

 

Spring DI Container

 - Spring DI Container가 관리하는 객체를 빈(Bean)이라고 하고, 이 빈들의 생명 주기(Life-Cycle)를 관리하는 의미로 빈팩토리(BeanFactory)라 한다.
 - Bean Factory에 여러가지 컨테이너 기능을 추가하여 ApplicationContext라 한다

 

<<interface>>  
BeanFactory   - Bean을 등록, 생성, 조회, 반환 관리
  - 일반적으로 BeanFactory보다는 이를 확장한 ApplicationContext를 사용
  - getBean() method가 정의되어 있음
ApplicationContext   - Bean을 등록, 생성, 조회, 반환 관리기능은 BeanFactory와 같음
  - Spring의 각종 부가 서비스를 추가로 제공
  - Spring이 제공하는 ApplicationContext 구현클래스는 여러가지 종류가 있음
WebApplicationContext   - 웹 환경에서 사용할 때 필요한 기능이 추가된 애플리케이션 컨텍스트
  - 가장 많이 사용하며, 특히 XmlWebApplicationContext를 가장 많이 사용

 

IoC

객체 간의 강한 결합을 다형성을 통해 결합도를 낮춤
 - 인터페이스, Factory로 사용 가능

 - 사용하지 않고 Maven으로 설정하면 더 편함

java project 오른쪽 마우스 - Configure - Convert to Maven Project

 

pom.xml 생성

 - mvnrepository.com - Spring Context - 5.3.18 - Maven

 >> </build> 밑에 <dependencies> 걸고 복붙

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>hello_di</groupId>
  <artifactId>hello_di</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
	 <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>5.3.18</version>
	</dependency>
  </dependencies>
</project>

- 객체 간의 강한 결합을 Assenbler를 통해 결합도를 낮춤
  >> IoC 호출 방식
  >> 팩토리 패턴의 자점을 더하여 어떠한 것에도 의존하지 않는 형태가 됨
  >> 실행시점(Runtime)에 클래스 간의 관계가 형성이 됨

 

Application.xml 생성

src 파일에서 오른쪽 마우스 - New - Spring Bean Configuration File

// application.xml
// bean만 설정

<?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="" class=""></bean>
	<!-- <bean id="" class="" scope="prototype"></bean> 디폴트는 싱글톤 -->

</beans>
ApplicationContext context = new ClassPathXmlApplicationContext("주소/application.xml");
//		HelloMessage helloMessage = (HelloMessage) context.getBean("id"); 
		HelloMessage helloMessage = context.getBean("id", HelloMessageKor.class);
        
        // Main.java는 controller, HelloMessageKor.class는 Service와 같음

 

728x90

'프로그래밍 > SPRING' 카테고리의 다른 글

06. AOP  (0) 2022.04.26
05. DI 적용  (0) 2022.04.24
04. DI  (0) 2022.04.23
03. Spring Framework  (0) 2022.04.23
01. Spring  (0) 2022.04.12