Springboot이 어떻게 시작되었는지 자세히 설명
@SpringBootApplication 메모는 Spring Boot의 핵심 메모입니다. 이것은 사실 조합 메모입니다.
@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 { … }정의는 여러 Annotation을 사용하여 원래 정보 마크업을 수행했지만 실제로 중요한 것은 세 가지 Annotation뿐입니다.
@Configuration(@SpringBootConfiguration 켜서 보니 @Configuration) @EnableAutoConfiguration @ComponentScan 즉 @SpringBootApplication = (기본 속성) @Configuration + @EnableAutoConfiguration + @ComponentScan.
따라서 다음과 같은 SpringBoot 부트 클래스를 사용하면 전체 SpringBoot 응용 프로그램은 이전 부트 클래스 기능과 동일하게 작동할 수 있습니다.
@Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 매번 이 세 개를 쓰는 것은 비교적 피곤하기 때문에 @SpringBootApplication을 쓰는 것이 편리하다.이어 이들 3개의 Annotation을 소개한다.
1、@Configuration
여기의 @Configuration은 우리에게 낯설지 않다. 바로 자바Config 형식의 Spring Ioc 용기의 설정 클래스가 사용하는 @Configuration이다. SpringBoot 커뮤니티는 자바Config 기반의 설정 형식을 추천한다. 그래서 이곳의 시작 클래스는 @Configuration을 표시한 후에 그 자체도 IoC 용기의 설정 클래스이다.
간단한 예를 들어 XML과 config 구성의 차이점을 살펴보겠습니다.
(1) 표현 형식 차원
XML 기반 구성은 다음과 같습니다.
JavaConfig 기반 구성은 다음과 같습니다.
@Configuration public class MockConfiguration {//bean 정의} @Configuration이 표시된 자바 클래스 정의는 자바 클래스 설정 클래스입니다.
(2) 등록 bean 정의 차원
XML 기반 구성은 다음과 같습니다.JavaConfig 기반 구성은 다음과 같습니다.
@Configuration public class MockConfiguration{ @Bean public MockService mockService(){ return new MockServiceImpl(); } } @Bean을 표시하는 모든 방법의 반환 값은 Spring의 IoC 용기에 bean 정의로 등록되며, 방법 이름은 이 bean이 정의한 id로 기본값입니다.만약에 여러분들이 자바를 배우는 데 어떤 문제(학습 방법, 학습 효율, 어떻게 취업하는지)에 대해 언제든지 저에게 문의하실 수 있습니다. 이것은 저의 자바 교류 학습 그룹입니다. 934623944여러분은 문제를 많이 교류하고 서로 돕습니다. 그룹에는 좋은 학습 강좌와 개발 도구가 있습니다.참고: CSDN(3) 표현 의존 주입 관계 차원
Bean과 bean 간의 의존 관계를 표현하기 위해 XML 형식에서는 일반적으로 다음과 같다. JavaConfig 기반의 설정 형식은 다음과 같다.
@Configuration public class MockConfiguration{ @Bean public MockService mockService(){ return new MockServiceImpl(dependencyService()); }
@Bean
public DependencyService dependencyService(){
return new DependencyServiceImpl();
}
} 만약 하나의 bean의 정의가 다른 bean에 의존한다면, 대응하는 JavaConfig 클래스에서 bean에 의존하는 생성 방법을 직접 호출하면 됩니다.
@Configuration: @Configuration을 언급하면 파트너 @Bean을 언급합니다.이 두 개의 주석을 사용하면 간단한spring 프로필을 만들 수 있으며 해당하는 xml 프로필을 대체할 수 있습니다.다음과 같습니다.
@Configuration public class Conf { @Bean public Car car() { Car car = new Car(); car.setWheel(wheel()); return car; }
@Bean
public Wheel wheel() {
return new Wheel();
}
} @Configuration의 주석 클래스는 이 클래스를 Spring IoC 용기를 bean 정의의 원본으로 사용할 수 있음을 표시합니다.
@Bean 주석은 Spring에 @Bean이 있는 주석 방법이 대상을 되돌려줍니다. 이 대상은 Spring 프로그램 상하문에 있는 bean으로 등록되어야 합니다.
2、@ComponentScan
@ComponentScan 이 주석은 Spring에서 매우 중요합니다. XML 설정의 요소에 대응합니다. @ComponentScan의 기능은 조건에 맞는 구성 요소 (예를 들어 @Component와 @Repository 등) 나 bean 정의를 자동으로 스캔하고 불러오는 것입니다. 최종적으로 이 bean 정의를 IoC 용기에 불러옵니다.
베이스 Packages 등 속성을 통해 @ComponentScan이 자동으로 스캔하는 범위를 세분화할 수 있습니다. 지정하지 않으면 기본 Spring 프레임워크는 @ComponentScan이 있는 클래스를 설명하는 패키지에서 스캔합니다.
참고: SpringBoot의 시작 클래스는 기본적으로 basePackages가 지정되지 않으므로 루트 패키지 아래에 두는 것이 좋습니다.3、@EnableAutoConfiguration
개인적으로 @Enable AutoConfiguration이라는 Annotation이 가장 중요하다고 생각하기 때문에 마지막에 해석해 보세요. 스프링 프레임워크가 제공하는 다양한 이름이 @Enable로 시작하는 Annotation 정의를 기억하십니까?예를 들어 @EnableScheduling, @EnableCaching, @EnableMbeanExport 등 @EnableAutoConfiguration의 이념과 업무 방식은 사실 일맥상통한다. 간단하게 요약하면 @Import의 지원을 받아 특정 장면과 관련된 bean 정의를 수집하고 등록하는 것이다.
@EnableScheduling은 @Import를 통해 Spring 스케줄링 프레임워크와 관련된 bean 정의를 IoC 용기에 불러옵니다. @EnablembeanExport는 @Import를 통해 JMX와 관련된 bean 정의를 IoC 용기에 불러옵니다.@Enable AutoConfiguration도 @Import의 도움을 빌려 자동 설정 조건에 부합되는 모든 bean 정의를 IoC 용기에 불러옵니다. 단지 이것뿐입니다.
@Enable AutoConfiguration은 클래스 경로의jar 의존에 따라 프로젝트를 자동으로 설정합니다. 예를 들어spring-boot-starter-web 의존이 추가되면 Tomcat와 Spring MVC 의존이 자동으로 추가되고 Spring Boot는 Tomcat와 Spring MVC를 자동으로 설정합니다.
@Enable AutoConfiguration은 다음과 같은 핵심 정보를 정의하는 복합 Annotation입니다.
@SuppressWarnings(deprecation)@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import(EnableAutoConfigurationImportSelector.class)public@interface Enable AutoConfiguration {...} 그 중에서 가장 중요한 것은 @Import(Enable Configuration Importable.@Enable AutoConfiguration은 SpringBoot 응용 프로그램에서 현재 SpringBoot에서 만들고 사용하는 IoC 컨테이너에 대한 모든 조건에 맞는 @Configuration 구성을 로드하도록 도와줍니다.'낙지'처럼 Spring 프레임워크에 있는 기존의 도구 종류인 Spring Factories Loader의 지원을 빌려 @Enable AutoConfiguration은 스마트한 자동 설정 효과를 얻을 수 있습니다!
자동 프로비저닝 히어로: SpringFactoriesLoader 상세 정보
SpringFactories Loader는 Spring 프레임워크의 개인적인 확장 방안에 속하는데 그 주요 기능은 지정한 프로필인 META-INF/spring이다.factories 설정을 불러옵니다.
public abstract class SpringFactoriesLoader {//… public static List loadFactories(Class factoryClass, ClassLoader classLoader) { … }
public static List loadFactoryNames(Class> factoryClass, ClassLoader classLoader) {
....
}
} @Enable AutoConfiguration과 함께 사용하면 @Enable AutoConfiguration의 전체 클래스 이름에 따라 org를 찾을 수 있는 기능을 제공합니다.springframework.boot.autoconfigure.EnableAutoConfiguration은 검색의 키로서 @Configuration 클래스 그룹을 가져옵니다.
위의 그림은 SpringBoot의 autoconfigure 의존 패키지에서 META-INF/spring입니다.factories 프로필에서 발췌한 내용은 문제를 잘 설명할 수 있습니다.
그래서 @Enable AutoConfiguration에서 자동으로 설정된 마법 기사는classpath에서 모든 META-INF/spring을 검색하는 것으로 바뀌었습니다.factories 프로필 및 org.springframework.boot.autoconfigure.EnableutoConfiguration에 대응하는 설정 항목은 반사 (Java Refletion) 를 통해 대응하는 @Configuration에 표시된 자바Config 형식의 IoC 용기 설정 클래스를 실례화한 다음 하나로 모아 IoC 용기에 불러옵니다.미완성, 미속!
만약에 여러분들이 자바를 배우는 데 어떤 문제(학습 방법, 학습 효율, 어떻게 취업하는지)에 대해 언제든지 저에게 문의하실 수 있습니다. 이것은 저의 자바 교류 학습 그룹입니다. 934623944여러분은 문제를 많이 교류하고 서로 돕습니다. 그룹에는 좋은 학습 강좌와 개발 도구가 있습니다.참고: CSDN
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.