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으로 설정하면 더 편함
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 생성
// 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 |