본문 바로가기
Spring

Spring Starter Project , @SpringBootApplication

by doriver 2023. 8. 6.

Spring Starter Project

개발에 필요한 환경설정이 거의다 되어 있음(?), 개발자가 복잡한 설정 없이 개발 환경이 준비된다고 함.

그래서 초보 개발자도 쉽게 웹 프로젝트를 만들 수 있다고 함.
( But, 해당 방식보다는 Spring Legacy Project를 실제 개발 업무에서 많이 사용한다고 함.

Spring Legacy Project의 경우 필요한 환경설정을 직접 해야한다고 한다 ) 

 

Spring Boot  >  Spring Starter Project

 

프로젝트를 생성하면, 메인 메소드가 있는 클래스(프로젝트이름Application)에 다음과 같은 것들을 볼수있다

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

이중에 눈에 띄는 것들

springframework.boot    ,     SpringApplication      ,       SpringBootApplication

 

autoconfigure.SpringBootApplication 으로 보아

@SpringBootApplication  은 자동설정을 해주는 기능이 있지 않을까 추측해 볼수 있다

 

@SpringBootApplication

이런식으로 SpringBootApplication이라는 interface가 구성되어 있다


package org.springframework.boot.autoconfigure;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.core.annotation.AliasFor;
import org.springframework.data.repository.Repository;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
		~
    			~
}

@ComponentScan

@component 어노테이션 및 @Service, @Repository, @Controller 등의 어노테이션을 스캔하여 Bean으로 등록해주는 어노테이션입니다.

 

@EnableAutoConfiguration

사전에 정의한 라이브러리들을  Bean으로 등록해 주는 어노테이션입니다. 
사전에 정의한 라이브러리들 모두가 등록되는 것은 아니고 특정 Condition(조건)이 만족될 경우에 Bean으로 등록합니다.