<beans xmlns="https://www.springframwork.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframwork.org/schema/mvc"
xsi:schemaLocation="http://www.sparingframwork.org/schema/beans
http://www.sparingframwork.org/schema/beans/spring-beans.xsd
http://www.sparingframwork.org/schema/mvc
http://www.sparingframwork.org/schema/mvc/spring-mvc.xsd
http://www.sparingframwork.org/schema/context
http://www.sparingframwork.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.sample.web"/>
<mvc:annotation-driven/>
<mvc:resources mapping="/static/**" location="/WEB-INF.static/"/>
</beans>
- 스프링 부트에서 @Configuration 어노테이션을 사용하여 구성을 정의하면 된다
- 컴포넌트 스캔은 메인 애플리케이션 클래스의 @SpringBootApplication 어노테이션을 사용하여 스캔 대상 패키지를 지정한다.
//디폴트를 설정을 위해 아무것도 설정하지 않는다
@Configuration
public class ApplicationConfig implements WebMvcConfigurer{
}
@SpringBootApplication(ScanBasePackages ={"com.sample.web"})
public class Application{
public static void main(String[] args) {
SpringApplication.run(Application.class.args);
}
}
- 스프링 부트는 설정을 변경하지 않으면 미리 정해진 디폴트 설정에 따라 동작한다
- 자동 구성 기능이 디폴트 동작을 설정한다.
- 자동구성을 사용하려면 @EnableAutoConfiguration 또는 @SpringBootApplication 어노테이션을 부여한다.
- @EnableAutoCofiguration은 여러번 부여 할 수 없기 때문에 기본 구성 클래스에 부여할 것을 권장한다.
- 자동구성은 개발자가 직접 명시한 구성을 덮어쓰지 않는다.
- 데이터 베이스에 대한 접속 설정을 정의하면 디폴트의 내장형 데이터 베이스는 자동 구성 대상에서 제외 되며 현재 어떤 자동 구성이 제외 되어있는지 알고 싶다면 인수에 -debug를 지정해 애플리케이션을 실행하면 자동 구성 보고서가 콘솔에 출력된다.
- 특정 자동 구성을 비활성화하려면 @EnableAutoConfiguration 어노테이션의 속성에서 제외할 구성 클래스를 지정한다.
- 설정파일의 spring.autoconfigure.exclude 속성으로도 제외가능하며 @SpringBootApplication을 이용할 때도 별칭인 exclude 속성으로 동일하게 처리할 수 있다.
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude= {DataSourceAutoConfiguration.class})
public class MyConfiguration{
}
- 메인 애플리케이션 클래스는 스프링 부트의 애플리케이션을 실행하는 메서드를 호출한다.
- 자바 애플리케이션의 엔트리 포인트인 main 메서드 안에서 Spring Application 클래스의 run 메서드를 호출하면 내장된 톰캣이 실행되고 Spring Ioc 컨테이너가 초기화 된다.
- 자동 구성에 의해 @EnableAutoConfiguration이 부여된 클래스의 패키지를 기준으로 동작하기 때문에 메인 애플리케이션 클래스는 디폴트 패키지가 아닌 루트 패키지에 배치할 것을 권장한다.
- 루트 패키지에 메인 애플리케이션 클래스를 배치함으로써 @ComponentScan의 basePackage 속성을 명시적으로 저장할 필욘느 없으나 scanBasePackageClasses 속성에는 컴포넌트 스캔의 기준 패키지에 배치한 클래스를 지정할 것을 권장한다. 이로인하여 팩터링이 쉬워지고 기준 패키지가 어떤 패키지인지 쉽게 알 수 있다.
- 스프링 부트를 사용하는 어플리케이션에는 클래스 대부분 @Configuration, @EnableAutoConfiguration, @ComponentScan을 지정한다 이를 대신하는 어노테이션은 @SpringBootApplication이다.
- @SpringBootApplication은 @EnableAutoConfiguration과 @EnableAutoConfiguration과 @CompnentScan의 속성을 커스터마이즈하는 별칭을 가지고 있어서 대부분이 이 어노테이션을 지정하는 것만으로 대응 가능하다.
package com.sample.web;
import org.springframework.boot.*;
import org.springframework.boot.autoconfiguration.*;
import org.springframework.streotype.*;
import org.springframework.web.bind.annotation.*;
import com.sampe.ComponentScanBasePackage; // 상위 패키지를 스캔의 기준으로 한다.
//@Configuration, @EnableAutoConfiguration, @ComponentScan을 지정한 것과 동일
@SpringBootApplication(scanBasePackageClasses={ComponentScanBasePackage.class})
@RestController//원래 컨트롤러에 작성할 어노테이션
public class Application{
@RequestMapping("/")//원래 컨트롤러에 작성할 메서드
public String hello(){
return "Hello World";
}
public static void main(String[] args){
SpringApplication.run(Application.class, args)
}
}
'프로그래밍 이야기 > SPRING BOOT 공부' 카테고리의 다른 글
스프링부트 설정파일 (1) | 2023.09.25 |
---|---|
스프링부트 공부- 그레이들정의 (0) | 2023.09.18 |
@ResponseBody, @RequestBody (0) | 2023.09.11 |
@ApiOperation, @apiparam, @Async,@RequestParam (0) | 2023.09.11 |
@RequestMapping,@api,@value 어노테이션 정리 (0) | 2023.09.08 |