마스터 :( B에 SpringBoot 항목) 원리를 분석 시작

그림 삽입 설명 여기

머리말

마지막 방법으로 할 수 있습니다 우리 쉽고 빠르게 자동 구성을 할 수의 SpringBoot 경험의 앞에, 복잡한 프로파일, 그래서 우리는 도움이되지만 궁금해 할 수 없습니다, 이전에 너무 좋지 않아 비해, 우리가 무엇을 탐구하기 위해 함께 작업 할 수


본문

우리는 봄 부팅 어떤 프로젝트를 개발, 시작 클래스로 사용됩니다

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

위의 코드, 주석 정의 (@SpringBootApplication) 및 클래스 정의 (SpringApplication.run) 가장 눈부신에서 볼 수 있듯이, 그래서 SpringBoot을 신비성, 우리는이 두 그것을 시작하고 싶어.

@ SpringBootApplication : 봄이 부팅 응용 프로그램, SpringBoot가 SpringBoot 응용 프로그램을 시작하는이 클래스의 주요 방법을 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 {

정의가 더 주석 원래 라벨 정보를 사용되었지만 SpringBootApplication 그것은 단지 세 주석 중요하다, 메모의 조합이다 :

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

우리는 다음과 같이 SpringBoot 클래스를 사용하기 시작한다면, 전체 클래스가 시작 SpringBoot 응용 프로그램 수 여전히 기능 이전 등과 같은 :

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

각 쓰기, 그래서 @SpringBootApplication 편리한 점을 더 피곤 쓰기 세. 다음 섹션에서는 이러한 세 가지 주석을 설명합니다.

1. @ SpringBootConfiguration : 부팅 구성 클래스의 봄;

클래스에 표시, 그는 그것이 봄 부팅 구성 클래스했다;

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

}

@Configuration은 사용되는 구성 클래스의 구성 컨테이너 JavaConfig 양식 @ 봄 IOC의가 있음을 우리에게 전혀 낯선 사람, 후 SpringBoot는, 그래서 여기에 자신을 @Configuration을 표시 수업을 시작, 지역 사회에 기반을 둔 구성 JavaConfig을 권장 구성 클래스는 실제로 IoC 컨테이너이다. 구성 클래스는 조립 컨테이너입니다 @Component

검토, 차이와 XML의 설정 구성에 따라 몇 가지 간단한 예 :

발현 수준의 양식
XML 구성 방식에 따라이있다 :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
       default-lazy-init="true">
    <!--bean定义-->
</beans>

JavaConfig 기반 구성은 이것이다 :

@Configuration
public class MockConfiguration{
    //bean定义
}

모든 표시 자바 클래스 정의는 @Configuration JavaConfig 구성 클래스입니다.

로그인 빈 정의 수준
XML의 형태로 구성에 따라이있다 :

<bean id="userService" class="..UserServiceImpl">
    ...
</bean>

양식 기반 구성 JavaConfig은 이것이다 :

@Configuration
public class SpringConfiguration{
    @Bean
    public UserService userService(){
        return new UserServiceImpl();
    }
}

빈은 Spring IoC 컨테이너, 메소드 정의 된 Bean의 ID에 대한 기본 이름을 등록 된 @Bean 표시된 모든 방법, 반환 값이 정의됩니다.

발현 수준 의존 관계 주입
콩 및 콩 사이 익스프레스 종속성 일반적으로 XML 형태이다 :

<bean id="mockService" class="..MockServiceImpl">
    <propery name ="dependencyService" ref="dependencyService" />
</bean>

<bean id="dependencyService" class="DependencyServiceImpl"></bean>

양식 기반 구성 JavaConfig은 이것이다 :

@Configuration
public class SpringConfiguration{
    @Bean
    public UserService userService(){
        return new UserServiceImpl(dependencyService());
    }
    
    @Bean
    public DependencyService dependencyService(){
        return new DependencyServiceImpl();
    }
}

당신은, 콩은 다른 콩에 의존하는 클래스 JavaConfig를 정의하면 직접에 해당하는 빈을 생성 메서드를 호출합니다.


2. @ ComponentScan : 자동 구성 기능을 설정;

이 댓글은 ComponentScan 기능 @ 실제로 자동으로 스캔 및로드 구성 요소 또는 빈 정의, 결국 이러한 bean 정의 (예 : @Component 및 @Repository 등) 자격이되는 XML 구성 요소에 해당, 봄, 매우 중요하다 @ComponentScan IOC는 컨테이너에로드.

우리는 세분화 할 수 있습니다 자동 스캔 basePackages에 의해 @ComponentScan 같은 사용자 정의 같은 속성의 범위를 지정하지 않을 경우 기본값은 클래스 선언 @ComponentScan 거짓말에서 스캔 패키지를 달성하는 스프링 프레임 워크가 될 것입니다.

참고 : 기본이 basePackages을 지정하지 않기 때문에 그래서 SpringBoot이 가장 루트 패키지에 배치되어 수업을 시작합니다.

3. @ EnableAutoConfiguration 자동 구성 기능을 설정;

와 @; SpringBoot 이유는 제로 구성을 할 수있다, 그 핵심은 @EnableAutoConfiguration 우리가 구성하는 데 사용 무엇이 주석, 봄 부팅이 자동으로 구성 우리를 돕는 것입니다 EnableAutoConfiguration 자동 구성 기능을 열 SpringBoot에게, 적용 할 수있는 자동 구성,
당신이 기억하는 경우 스프링 프레임 워크는 @Enable와 주석의 정의를 시작하는 이름의 다양한 제공? EnableAutoConfiguration 아이디어와 일을하는 방법 @ 예, @ EnableScheduling, @ EnableCaching, @ EnableMBeanExport 등의 경우, 실제로 같은 균주
에 대한 간단한 개요, 그 ** 가져 오기 @ 수집하고 ** 특정 장면에 관련된 bean 정의를 등록하는 지원.
스케줄링 프레임 워크 스프링 빈 정의에 의해 @Import을 @EnableScheduling하는 관련 IoC 컨테이너에로드됩니다.
@EnableMBeanExport의 IoC는 JMX 콩 @Import 관련 정의를 통해 컨테이너에로드됩니다.
또한 @EnableAutoConfiguration @Import의 도움으로 자동으로 구성 IoC 컨테이너, 아무것도 이상으로 기준을 충족하는 모든 빈 정의를로드합니다!

@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

@ AutoConfigurationPackage 자동 구성 패키지 :

@ 가져 오기 (AutoConfigurationPackages.Registrar.class) :

어셈블리에 용기에 도입 봄의 주석 @Import; 구성 요소에 의해 도입 AutoConfigurationPackages.Registrar.class여기서 모든 기본 패키지 구성 클래스의 모든 구성 요소 (@SpringBootApplication 클래스 라벨) 및 스캔 스프링 용기 내부의 하부 서브 패킷;

@ 오기 (EnableAutoConfigurationImportSelector.class);

컨테이너로 가져 오기 구성 요소?

EnableAutoConfigurationImportSelector : 어셈블리 셀렉터를 도입;

이러한 구성 요소가 컨테이너에 추가 될 것이다 모든 구성 요소가 도입 된 전체 클래스 이름 방식을 반환하는 데 필요한;

컨테이너 수입 자동 구성 클래스 (xxxAutoConfiguration)을 많이 줄 것이다;이 시나리오는 컨테이너에 필요한 모든 구성 요소를 가져오고 이러한 구성 요소를 구성하는 것입니다
그림 삽입 설명 여기
자동 구성 클래스로, 필요가 없습니다 수동으로 우리가 기능적 구성 요소를 주입 구성을 작성하는 방법 및 기타 작업,
도구 기존의 스프링 프레임 워크에 의해 : SpringFactoriesLoader 지원, SpringFactoriesLoader.loadFactoryNames (EnableAutoConfiguration.class, 클래스 로더) 봄 부팅 시작시 META-INF 클래스 패스로부터 획득 / spring.factories EnableAutoConfiguration 값, 컨테이너에 자동 구성 클래스로이 값을 지정, 자동으로 우리를 위해 작업을 자동 구성에 대한 구성을 적용하는 클래스 우리는 도움말을 자신의 구성, 자동 구성 공과를 시작하기 전에 필요한 우리;

그림 삽입 설명 여기
그림 삽입 설명 여기
그림 삽입 설명 여기
J2EE 전체 통합 솔루션 및 자동 구성은 봄 부팅 - 자동 구성입니다

그림 삽입 설명 여기

게시 40 개 원래 기사 · 원 찬양 9 ·은 20000 +를 볼

추천

출처blog.csdn.net/aawmx123/article/details/102536254