Showing

[자바, 스프링] 스프링은 객체 컨테이너 본문

JAVA, SPRING

[자바, 스프링] 스프링은 객체 컨테이너

RabbitCode 2023. 4. 19. 23:36

* 최범균님의 "스프링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();//사용한 자원은 반환해주어서 메모리 누수가 없도록 해준다.
    }
}

new로 생성할 때 대비, 앞 뒤로 로그 추가. 컨테이너에서 객체를 생성하는 로그들이 추가된 것 뿐

System.out.println("transportationWalk1 == transportationWalk2 = "+ (transportationWalk1==transportationWalk2));

 

위의 결과가 true라는 것은 transportationWalk1와 transportationWalk2가 같은 객체라는 것을 의미한다.

즉 getBean()메서드는 같은 객체를 리턴하는 것이다.

별도 설정을 하지 않을 경우 스프링은 한 개의 빈 객체만을 생성하며, 이때 빈 객체는 '싱글톤'범위를 갖는다고 표현한다.

 

 

참고문헌 : https://velog.io/@justin403502/spring-%EC%8A%A4%ED%94%84%EB%A7%815-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9E%85%EB%AC%B8-2%EA%B0%95

 

[spring] 스프링 시작하기

최범균님의 "스프링5 프로그래밍 입문" 책을 정리하기 위해 작성된 내용입니다. 스프링 프로젝트 시작하기 maven 설치 우분투로 실습을 진행하므로 터미널에 이라고 치면 간단하게 maven 을 설치할

velog.io

 

'JAVA, SPRING' 카테고리의 다른 글

[자바] DI(Dependency Injection) 의존 주입  (0) 2023.04.24