SpringBoot 시작 클래스@SpringBootApplication 설명 뒤의 비밀

SpringBoot 프로젝트 를 사용 할 때 무엇 을 하 든 시작 류 를 떠 날 수 없다 는 것 을 알 게 됩 니 다.그 는 프로그램의 유일한 입구 입 니 다.그러면 그 는 도대체 우 리 를 위해 무엇 을 했 습 니까?이 글 은 주로@SpringBootApplication 을 해석 합 니 다.
시작 클래스

@SpringBootApplication
public class Application {
	
	public static void main(String[] args) { 
		SpringApplication.run(Application.class,args); 
	}
	
}
2.@SpringBootApplication
@SpringBootapplication:Spring Boot 응용 프로그램 은 특정한 종류 에 표시 되 어 있 습 니 다.이 종 류 는 SpringBoot 의 주 설정 류 임 을 설명 합 니 다.
SpringBoot 는 이러한 main 방법 을 실행 하여 SpringBoot 응용 을 시작 해 야 합 니 다.
관련 설정 의 시작 은 모두 이 주석 으로 우 리 를 도와 완성 한 것 입 니 다.눌 러 서 알 아 보 세 요.

@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 {

}
눌 러 보면 그의 주해 류 에 아직도 많은 주해 가 있 는데 바로 사용자 정의 조합 주해 이다.
다음은 그의 그룹의 주해 에 대해 일일이 설명 하 겠 다.
1、@Target(ElementType.TYPE)
@Target 은 Annotation(주석)이 수식 하 는 대상 범 위 를 설명 합 니 다.
값 추출(Element Type):
1.CONSTRUCTOR:구조 기 설명 에 사용
2.FIELD:설명 영역 에 사용
3.LOCAL_VARIABLE:부분 변 수 를 설명 하 는 데 사용 합 니 다.
4.METHOD:설명 방법 에 사용
5.PACKAGE:가방 설명 에 사용
6.PARAMETER:매개 변 수 를 설명 하 는 데 사용
7.TYPE:클래스,인터페이스(주해 유형 포함)또는 enum 설명 에 사용
2、@Retention(RetentionPolicy.RUNTIME)
주 해 는 생명주기 에 따라 3 가지 로 나 눌 수 있다.
1.RetentionPolicy.SOURCE:주 해 는 원본 파일 에 만 남아 있 고 자바 파일 이 class 파일 로 컴 파일 될 때 주 해 는 버 려 집 니 다.
2.RetentionPolicy.CLASS:주 해 는 class 파일 에 저장 되 지만 jvm 에서 class 파일 을 불 러 올 때 버 려 집 니 다.이것 은 기본 수명 주기 입 니 다.
3.RetentionPolicy.RUNTIME:주 해 는 class 파일 에 저 장 될 뿐만 아니 라 jvm 에서 class 파일 을 불 러 온 후에 도 존재 합 니 다.
3、@Documented
이 주 해 는 자바 doc 를 만 들 때 기록 되 는 지 여 부 를 표시 하 는 데 만 사 용 됩 니 다.
사용자 정의 주석 을 사용 할 때@Documented 로 표시 할 수 있 습 니 다.@Documented 로 표시 하면 javadoc 를 생 성 할 때@Documented 주석 을 표시 합 니 다.
4、@Inherited
@Inherited 는 주석 을 수식 하 는 표지 로 사용자 정의 주석 에 사 용 됩 니 다.
우선 주석 을 사용자 정의 합 니 다.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ATable {
  public String name() default "";
}
다음은 사용자 정의 주 해 를 사용 하 는 장면 입 니 다.
클래스 계승 관계 에서@Inherited 의 역할
클래스 계승 관계 에서 하위 클래스 는 부모 클래스 가 사용 하 는 주해 에서@Inherited 로 수 식 된 주 해 를 계승 합 니 다.

@ATable 
public class InheritedBase {
}
public class MyInheritedClass extends InheritedBase {
}
인터페이스 계승 관계 에서@Inherited 의 역할
인터페이스 계승 관계 에서 하위 인 터 페 이 스 는 부모 인터페이스 에 있 는 어떠한 주석 도 계승 하지 않 습 니 다.부모 인터페이스 에서 사용 하 는 주석 이@Inherited 에 의 해 수식 되 었 든 안 되 었 든 간 에.

@ATable
public interface IInheritedInterface {
}
public interface IInheritedInterfaceChild extends IInheritedInterface {
}
클래스 는 인터페이스 관계 에서@Inherited 의 역할 을 실현 합 니 다.
클래스 가 인 터 페 이 스 를 실현 할 때 어떠한 인터페이스 에서 정 의 된 주 해 를 계승 하지 않 습 니 다.

@ATable
public interface IInheritedInterface {
}
public class MyInheritedClassUseInterface implements IInheritedInterface {
}
5、@SpringBootConfiguration
어떤 클래스 에 표시 되 어 있 으 며,이것 은 Spring Boot 의 설정 클래스 임 을 표시 합 니 다.
누 르 면 그 도 사실 사용자 정의 주해 라 는 것 을 알 수 있다.
@Configuration 에서 spring 을 배 운 사람 은 낯 설 지 않 을 거 예요.
역할:현재 클래스 를 설정 클래스 로 지정 합 니 다.spring 을 사용 할 때 처음에는 xml 설정 이 었 습 니 다.바로 이 설명 입 니 다.클래스 설정 방식 을 열 었 습 니 다.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}
6、@EnableAutoConfiguration
이전에 우리 가 설정 해 야 할 것 은 Spring Boot 가 자동 으로 설정 해 줍 니 다.
@EnableAutoConfiguration 은 SpringBoot 에 자동 설정 기능 을 켜 라 고 알려 줍 니 다.이렇게 자동 으로 설정 해 야 효력 이 발생 합 니 다.
클릭 하면@Import 를 발견 할 수 있 습 니 다.말하자면 그 는@Import 의 지원 을 받 아 특정 장면 과 관련 된 bean 정 의 를 수집 하고 등록 하 는 것 입 니 다.
@import 역할:다른 설정 클래스 가 져 오기
@EnableAutoConfiguration 도@Import 의 도움 을 받 아 자동 설정 조건 에 맞 는 모든 bean 정 의 를 IoC 용기 에 불 러 옵 니 다.이것 뿐 입 니 다!

@SuppressWarnings("deprecation")
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

}
EnableAutoConfiguration ImportSelector:어떤 구성 요소 의 선택 기 를 가 져 옵 니까?
용기 에 매우 많은 자동 설정 클래스(xxxAutoConfiguration)를 가 져 옵 니 다.
在这里插入图片描述
대략적인 절 차 는:
Spring Boot 가 시 작 될 때 EnableAutoConfiguration ImportSelector 클래스 를 통 해 클래스 경로 에서
META-INF/spring.factories 에서 EnableAutoConfiguration 이 지정 한 값(바로 위 캡 처)을 가 져 옵 니 다.
모든 종류의 이름 이 반사 되 는 생 성 방식 으로 이 값 을 자동 설정 클래스 로 용기 에 가 져 오 면 자동 설정 클래스 가 적 용 됩 니 다.
자동 설정 작업 도와 주기;
이전에 우리 가 설정 해 야 할 것 은 자동 설정 클래스 가 모두 설정 되 어 있 습 니 다.이것 은 바로 spring boot 를 사용 하여 spring 을 사용 하고 있 습 니 다.springmvc 는 보기 해상도 기,데이터 베이스 연결 풀,사무 등 설정 을 설정 하지 않 아 도 되 는 이유 입 니 다.직접 상 자 를 열 면 바로 사용 할 수 있다.
물론 springboot 도 저 에 게 설정 을 수정 하 는 방법 을 제공 해 주 었 습 니 다.그것 은 yml 이나 propertie 파일 을 통 해 springboot 가 설정 한 기본 값 을 수정 하 는 것 입 니 다.
7、@ComponentScan
역할:주 해 를 통 해 spring 이 용 기 를 만 들 때 스 캔 할 가방 을 지정 합 니 다.
basePackages 등 속성 을 통 해 세분 화 된 맞 춤 형@Componentscan 자동 스 캔 범 위 를 지정 하지 않 으 면 기본 Spring 프레임 워 크 는 성명@Componentscan 이 있 는 패키지 에서 스 캔 합 니 다.

@ComponentScan("com.gzl")
이것 이 바로 spring boot 시동 류 가 왜 가방 밖 에 두 었 는 지 이유 입 니 다.
3.이 주 해 를 사용 하지 않 고 프로젝트 를 시작 할 수 있 습 니까?
@SpringBootApplication 을 다음 세 개의 주석 으로 바 꾸 면 정상적으로 시작 할 수 있 습 니 다.

package com.gzl.cn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
	
	public static void main(String[] args) { 
		SpringApplication.run(Application.class,args); 
	}
	
}
스프링 부 트 시작 클래스@스프링 부 트 애플 리 케 이 션 설명 뒤의 비밀 에 관 한 글 을 소개 합 니 다.더 많은 관련@스프링 부 트 애플 리 케 이 션 설명 뒤의 비밀 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기