Recent Posts
Recent Comments
Link
11-21 14:38
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

Spring bean 본문

DEV&OPS/Java

Spring bean

ALEPH.GEM 2023. 1. 12. 22:19

Spring bean

스프링 프레임워크가 관리하는 클래스들의 인스턴스 객체들을 Spring bean 이라고 합니다.

 

 

Spring bean 설정 방법

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="bean객체를식별하는id값" class="bean객체가정의된클래스의패키지경로" />
</beans>

어노테이션을 이용해서 설정할 때에는 아래처럼 클래스 위에 @Configuration 어노테이션을 설정하고, 메서드 위에는 @Bean 어노테이션을 설정해 줍니다.

패키지 경로는 net.aacii.app 으로 가정합니다.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import net.aacii.app.service.SampleService;
import net.aacii.app.service.SampleServiceImpl;

@Configuration
public class AppConfig {
	@Bean
	SampleService sampleService() {
		return new SampleServiceImpl();
	}
}

 

 

IoC 컨테이너

Spring bean 인스턴스를 생성하기 위해 IoC 컨테이너를 먼저 생성해야 합니다.

IoC컨테이너는 bean 인스턴스들간의 의존성을 관리합니다.

ApplicationContext 인터페이스는 이러한 IoC 컨테이너의 인터페이스 입니다.

ApplicationContext는 일반적으로 아래처럼 생성 할 수 있습니다. (beans.xml은 bean이 정의된 xml파일입니다.)

ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");

만약 파일 시스템의 절대 경로를 지정한다면 아래 처럼 생성 할 수 있습니다.

ApplicationContext ctx = new FileSystemXmlApplicationContext("src/main/java/beans.xml");

만약 위의 예제 처럼 AppConfig class 파일로 IoC 컨테이너를 생성할 때는 아래처럼 할 수 있습니다.

ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);

 

ApplicationContext에 bean 인스턴스가 생성될 때, 생성되는 Scope를 정할 수 있습니다.

singleton은 ApplicationContext 하나 당 하나의 인스턴스를 생성합니다.(기본값)

prototype은 getBean()메서드가 호출될 때마다 하나의 인스턴스를 생성합니다.

request는 HTTP request 영역 안에 인스턴스가 생성됩니다.

session은 HTTP session 영역 안에 인스턴스가 생성됩니다.

global-session은 전역 HTTP session 안에서 인스턴스가 생성됩니다.

 

예를 들어 xml의 경우

<bean id="bean객체를식별하는id값" class="bean객체가정의된클래스의패키지경로" scope="prototype" />

처럼 scope를 지정해 줄 수 있습니다.

클래스 파일을 사용하는 경우에는 @Scope 어노테이션으로 지정합니다.

@Bean
@Scope("prototype")
SampleService sampleService(){
    return new SampleServiceImple();
}

 

 

Bean 인스턴스(객체) 의 생성 소멸

java에서 인스턴스가 생성 될 때 생성자가 호출되고 소멸할 때 소멸자가 호출됩니다.

bean 인스턴스도 마찬가지 인데, 생성될 때 호출 되는 메서드와 소멸될 때 호출되는 메서드를 지정할 수 있습니다.

xml 의 예)

<bean id="bean객체를식별하는id값" class="bean객체가정의된클래스의패키지경로" init-method="init" destroy-method="cleanUp" />

class 의 예)

public class SampleServiceImpl implements SampleService{
    public void init(){
    }
    public void cleanUp(){
    }
}

팩토리 패턴의 예)

<bean id="bean객체를식별하는id값" class="bean객체가정의된클래스의패키지경로" factory-mehtod="getInstance" />
public class SampleServiceImpl implements SampleService{
    private SampleServiceImpl(){
    }
    private static class FactoryHolder{
        static SampleService instance = new SampleServiceImpl();
    }
    public static SampleService getInstance(){
    return FactoryHolder.instance;
    }
}

 

 

 

 

 

 

 

 

 

 

728x90