Bean, 스프링 컨테이너, 싱글톤패턴

한동훈·2022년 7월 28일
0

항해99

목록 보기
9/29

1. 싱글톤 패턴 :

싱글톤 패턴은 '하나'의 인스턴스만 생성하여 사용하는 디자인 패턴이다. 인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용하는 것!

2. getBeanDefinitionNames()

스프링에 등록된 모든 빈 이름을 조회합니다. : 아래와 같이 모든 빈 이름을 조회 할 수 있음
ApplicationContext ctx = SpringApplication.run(FirstprojectApplication.class, args);

String[] beanNames = ctx.getBeanDefinitionNames();
for (String beanName : beanNames) {
System.out.println(beanName);
}
참고 : https://steady-coding.tistory.com/594

3. 스프링 컨테이너 :

스프링 컨테이너
스프링 컨테이너는 스프링 빈의 생명 주기를 관리하며, 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 한다. IoC와 DI의 원리가 스프링 컨테이너에 적용된다.

개발자는 new 연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸하지만, 스프링 컨테이너를 사용하면 해당 역할을 대신해 준다. 즉, 제어 흐름을 외부에서 관리하게 된다. 또한, 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다.

(1)ApplicationContext를 스프링 컨테이너라고 한다.
(2)스프링 컨테이너는 기본적으로 빈을 싱글톤으로 관리해준다.
(3)내부에는 빈 저장소가 존재한다

참고 : https://velog.io/@max9106/Spring-ApplicationContext

4. 스프링 빈 등록 방식

스프링 빈은 스프링 컨테이너에 의해 관리되는 자바 객체(POJO)를 의미한다.

Component Scan
컴포넌트 스캔은 @Component를 명시하여 빈을 추가하는 방법이다. 클래스 위에 @Component를 붙이면 스프링이 알아서 스프링 컨테이너에 빈을 등록한다.

public @interface Component {

컴포넌트 스캔의 대상 :
@Component 외에 @Controller, @Service, @Repository, @Configuration는 @Component의 상속을 받고 있으므로 모두 컴포넌트 스캔의 대상이다.

@Controller
스프링 MVC 컨트롤러로 인식된다.
@Repository
스프링 데이터 접근 계층으로 인식하고 해당 계층에서 발생하는 예외는 모두 DataAccessException으로 변환한다.
@Service
특별한 처리는 하지 않으나, 개발자들이 핵심 비즈니스 계층을 인식하는데 도움을 준다.
@Configuration
스프링 설정 정보로 인식하고 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다. (물론 스프링 빈 스코프가 싱글톤이 아니라면 추가 처리를 하지 않음.)

Java 코드로 빈을 등록할 수 있다. 클래스를 생성하고, 위에서 언급한 @Configuration 어노테이션을 활용한다.

자바 코드로 등록 :
@Configuration
public class AppConfig {

@Bean
public MemberRepository memberRepository() {
    return new MemoryMemberRepository();
}

@Bean
public MemberService memberService() {
    return new MemberServiceImpl(memberRepository());
}

}
이때, 빈을 등록하기 위해 인스턴스를 생성하는 메소드 위에 @Bean를 명시하면 된다.

참고 : https://steady-coding.tistory.com/594

#### @Component의 조건 :
@ComponentScan에 설정해 준 packages 위치와 하위 packages들
ex)
@Configuration
@ComponentScan(basePackages = "com.hdonghun.springboot")
class BEANConfig{...}

하지만, 기존에 우리는 ComponentScan이라는 어노테이션을 보지 못 하였는데, 이유는 즉, @SpringBootApplication이라는 상위의 어노테이션에서 이것을 기본 default로 설정이 되어 있어서 그런거 였다...

profile
돌덩이

0개의 댓글