본문 바로가기
카테고리 없음

[Spring Framework] @Component

by minux_s 2020. 12. 6.
728x90

애플리케이션이 ComponentScan을 가지고 있고, 기본값은 componentscan을 붙이고 있는 configuration부터 시작해서 이 애플리케이션 class가 component scan 시작지점이 된다.

이 애플리케이션 클래스와 이 애플리케이션을 담고있는 패키지부터 이 패키지 안의 모든 것부터 패키지 이하의 다른 패키지까지 전부 스캔한다.

하지만 이 패키지 밖의 것은 안된다.

 

중요한 설정으로 filter!!

componentscan을 한다고 모든 annotation을 처리해서 등록하는 것이 아니다,

걸러주는 옵션이 있어서 (Excludefilter, includeFilters), 어디부터 어디까지 스캔할지와, 어떤걸 거를지 이 두가지 설정이 있다.

 

기본적으로 이 컴포넌트라는 어노테이션을 들고 있는 것들이 bean으로 등록이 된다. 그래서 @Service도 컴포넌트 어노테이션, @Repository, @Controller도 마찬가지

이런 어노텡션들이 bean으로 등록되어있고, 단점으로는 이런 bean들을 applicationcontext같은 경우 single tone scope인 bean들의 경우 초기에 생성을 한다. 그렇기 떄문에 초기의 구동시간이 길 수 있다.

구동시간에 예민하다면 다른 방법을 고려할 수 있는데, 다른 방법중 하나다 functional이 있다. 이 경우 reflection, proxy 기법을 사용하지 않기 때문에 성능에 영향 X

 

Springboot로 애플리케이션 구동 방법 중 하나로

1) static

2) builder

3) 인스턴스를 만들어 사용

 

public static void main(String[] args){
	var app = new SpringApplication(Demospring51Application.class);
    app.addInitializers(new ApplicationContextInitializer<GenericApplicationContext);
    	@Override
        public void initialize(GenericApplicationContext ctx){
        	ctx.registerBean(MyService.class);
            }
        });
        app.run(args);
   }
 }

컴포넌트스캔의 역할 가장 중요한 속성 2가지

1) 스캔 위치 설정

2) 필터: 어떤 어노테이션을 스캔할지

 

컴포넌트 스캔되는 대상들

1) @Repository

2) @Service
3) @Controller

4) @Configuration

728x90

댓글