Spring - bean 과 Singleton

code_able·2023년 10월 30일
0

Bean

Spring에서 Bean은 Spring IoC 컨테이너에 의해 생성, 관리되는 객체를 말합니다. Bean은 일반적으로 Spring의 ApplicationContext를 통해 접근할 수 있습니다.

Bean은 Spring이 IoC 컨테이너를 초기화하고 설정 파일을 로드할 때 생성됩니다. Bean은 애플리케이션의 주요 구성요소로서, 서비스, 데이터 객체, 컨트롤러 등과 같이 애플리케이션의 여러 부분에서 사용됩니다.

Spring은 Bean을 싱글톤, 프로토타입 등 다양한 스코프로 생성할 수 있습니다.

싱글톤(Singleton)

Spring에서의 싱글톤은 IoC 컨테이너가 특정 Bean을 단 하나의 인스턴스로만 관리하는 것을 의미합니다. 즉, 해당 Bean의 인스턴스가 애플리케이션 전체에서 하나뿐입니다.

Spring IoC 컨테이너가 Bean을 생성할 때, 기본적으로 해당 Bean은 싱글톤으로 생성됩니다. 따라서 동일한 Bean을 여러 곳에서 주입받더라도 동일한 인스턴스가 반환됩니다.

@Service
public class MyService {
    // ...
}

위 코드에서 @Service 어노테이션은 Spring에게 MyService 클래스를 Bean으로 등록하도록 지시합니다. 이때 MyService는 싱글톤으로 생성됩니다.

싱글톤은 기본적인 스코프입니다. 따라서 싱글톤으로 생성된 Bean은 애플리케이션 전체에서 공유됩니다.

Bean의 스코프는 설정을 통해 변경할 수 있습니다. 다른 스코프로 지정된 Bean은 해당 스코프의 특성에 따라 생성 및 관리됩니다.

Bean의 생명주기는 초기화와 소멸로 나뉘며, 스프링에서는 @PostConstruct와 @PreDestroy 어노테이션을 통해 메서드를 지정하여 Bean의 초기화와 소멸 작업을 수행할 수 있습니다.

각 Bean은 기본적으로 스프링의 IoC 컨테이너에 의해 생성되므로, 개발자는 Bean을 생성하는 코드를 작성하지 않아도 됩니다.

Spring은 Bean의 스코프와 관리 방식을 조정할 수 있는 다양한 기능을 제공하여 다양한 환경과 요구에 맞게 사용할 수 있도록 합니다.

Spring에서 클래스를 Bean으로 등록하는 어노테이션

@Component:

가장 일반적인 어노테이션으로, 해당 클래스를 Spring의 컴포넌트 스캔 대상으로 지정합니다. 주로 일반적인 컴포넌트나 서비스 클래스에 사용됩니다.
@Repository:

데이터 액세스 계층에서 사용되며, Spring에게 해당 클래스가 데이터베이스 액세스 등을 담당하는 리포지토리 클래스임을 알려줍니다.
@Service:

비즈니스 로직을 처리하는 서비스 클래스를 나타냅니다. 일반적으로 트랜잭션 관리 등을 수행합니다.
@Controller:

Spring MVC에서 사용되며, 웹 애플리케이션의 컨트롤러 역할을 하는 클래스를 나타냅니다.
@RestController:

Spring MVC에서 사용되며, RESTful API를 제공하는 컨트롤러 클래스를 나타냅니다. 일반적으로 JSON 또는 XML 형식의 데이터를 반환합니다.
@Configuration:

Java Config 클래스로서, Bean을 정의하고 구성할 때 사용됩니다. @Bean 어노테이션을 사용하여 메서드를 Bean으로 지정할 수 있습니다.
@Bean:

메서드에 사용되며, 해당 메서드의 반환 값을 Spring 컨테이너의 Bean으로 등록합니다.
@ComponentScan:

패키지 스캔을 통해 컴포넌트를 찾도록 지정합니다.
@Import:

다른 Java Config 클래스를 현재 클래스로 가져와서 Bean을 등록합니다.

Java Config 클래스를 사용하여 Bean을 정의하는 방법

Java Config 클래스 작성

@Configuration
public class AppConfig {
    
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
    
}

Java 클래스에서 사용

ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyBean myBean = context.getBean(MyBean.class);
profile
할수 있다! code able

0개의 댓글