일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- VUE
- 프린세스메이커
- 카렌
- R
- JWT
- 스마일게이트
- 마인크래프트뮤지컬
- node
- 알고풀자
- Ajax
- 디자드
- 레베카
- Jinja2
- 정글사관학교
- 파이썬서버
- flask
- 언리얼뮤지컬
- 으
- Express
- 언리얼프로그래머
- Unseen
- EnhancedInput
- 데이터베이스
- 게임개발
- Bootstrap4
- 프메
- 스터디
- 언리얼
- 미니프로젝트
- Enhanced Input System
- Today
- Total
Showing
[자바, 스프링] 스프링은 객체 컨테이너 본문
* 최범균님의 "스프링5 프로그래밍 입문" 책을 정리하기 위해 작성된 내용입니다.
메이븐 의존 그래프
스프링의 핵심 기능은 객체를 생성하고 초기화하는 것이다. 이와 관련된 기능은 ApplicationContext라는 인터페이스에 정의되어 있다.
- BeanFactory 인터페이스는 객체 생성과 검색에 대한 기능을 정의한다. 예를 들어 생성된 객체를 검색하는 데 필요한 getBean() 메서드가 BeanFacotry에 정의되어 있다. 객체를 검색하는 것 이외에 싱글톤/프로토타입 빈인지 확인하는 기능도 제공한다.
- ApplicationContext 인터페이스는 메시지, 프로필/환경 변수 등을 처리할 수 있는 기능을 추가로 정의한다.
- 계층도의 가장 하단에 위치한 세개의 클래스는 BeanFactory와 ApplicationContext에 정의된 기능의 구현을 제공한다.
-- AnnotationConfigApplicationContext : 자바 애노테이션을 이용한 클래스로부터 객체 설정 정보를 가져온다.
-- GenericXmlApplicationContext : XML로부터 객체 설정 정보를 가져온다.
-- GenericGroovyApplicationContext : 그루비 코드를 이용해 설정 정보를 가져온다.
실습
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>spring4</groupId>
<artifactId>ch02_pjt_01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
src > main > java > org.example > class TransportationWalk
package org.example;
public class TransportationWalk {
public void move(){
System.out.println("도보로 껑충 이동합니다.");
}
}
src > main > resources > applicationContext.xml
<?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="tWalk" class ="org.example.TransportationWalk"/>
</beans>
src > main > java > org.example > Main
package org.example;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
//컨테이너
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
//컨테이너에 있는 bean을 가져온다
TransportationWalk transportationWalk1 = ctx.getBean("tWalk", TransportationWalk.class);
TransportationWalk transportationWalk2 = ctx.getBean("tWalk", TransportationWalk.class);
transportationWalk1.move();
System.out.println("transportationWalk1 == transportationWalk2 = "+ (transportationWalk1==transportationWalk2));
ctx.close();//사용한 자원은 반환해주어서 메모리 누수가 없도록 해준다.
}
}
System.out.println("transportationWalk1 == transportationWalk2 = "+ (transportationWalk1==transportationWalk2));
위의 결과가 true라는 것은 transportationWalk1와 transportationWalk2가 같은 객체라는 것을 의미한다.
즉 getBean()메서드는 같은 객체를 리턴하는 것이다.
별도 설정을 하지 않을 경우 스프링은 한 개의 빈 객체만을 생성하며, 이때 빈 객체는 '싱글톤'범위를 갖는다고 표현한다.
'JAVA, SPRING' 카테고리의 다른 글
[자바] DI(Dependency Injection) 의존 주입 (0) | 2023.04.24 |
---|